学生成绩管理系统源程序

上传人:灯火****19 文档编号:102363126 上传时间:2022-06-06 格式:DOCX 页数:27 大小:72.65KB
返回 下载 相关 举报
学生成绩管理系统源程序_第1页
第1页 / 共27页
学生成绩管理系统源程序_第2页
第2页 / 共27页
学生成绩管理系统源程序_第3页
第3页 / 共27页
点击查看更多>>
资源描述
#include #include #include #define PF printf#include time.h #define LEN sizeof(struct St1)/定义结构体 /typedef struct St1char IDNumber16;/* 学号 */char FamilyName16; /* 姓*/char GivenName16; /* 名 */int sex; /* 性别( 0 代表 女, 1 代表 男) */int BirthYear; /* 出生年*/int BirthMonth; /* 出生月 */int BirthDay; /* 出生日*/float score0,score1,score2,score3; /* 成绩 */float sum; /* 总分 */float average; /* 平均分 */struct St1 *next;StudentNode;int time()structtm* ptm;longts;inty,m,d,h,n,s;ts =time(NULL);ptm =localtime(&ts);y =ptm- tm_year+1900;/年m =ptm- tm_mon+1;/月d =ptm- tm_mday;/日h =ptm- tm_hour;/时n =ptm- tm_min;/分s =ptm- tm_sec;/秒return(y);StudentNode *head=NULL; /全局指针c 为总分int n,i=0,c=0,d=0,j=0;/全局变量j 在函数中作数组下标或循环变量数组中元素个数d 为平均分数组元素个数float English=0.0,Math=0.0,C=0.0,Mazhe=0.0,Sum100,Avr100;/全局变量/ 自定义函数 /void show_menu();/显示菜单void menu();/执行菜单void creat_stu();/建立链表void input_stu(); /输入学生信息 void print_stu();/显示链表中所有记录信息void search_NO();/ 以学号方式查询信息void search_name();/ 以姓方式查询信息void arrage_stu();/ 学生成绩排名void del_stu();/删除学生信息void revise_stu();/修改学生信息void save();/保存信息void jisuan();/计算所有学生的以及各科总分和均分void search_clas();/按班级查询显示学生信息void insert_stu();/ 插入学生记录到表中void sort(float x,int n);/对学生按总分进行从高到底排序void search_allscore();/按学生总成绩查询,用来输出排名信息void jieduan(); / 用来输出按平均分阶段输出信息,其中用了按平均分输出信息的程序。void Loadf();/从文件中读出所有学生记录void main()printf(”*);printf(n);printf(printf(n);printf(n);printf(creat_stu();menu();欢迎来到学生管理系统!);/*创建链表制作人:陈志);* void creat_stu()FILE *fp;long size;StudentNode *p1,*p2;head=(StudentNode *)malloc(sizeof(StudentNode);head-next=NULL;if(fp=fopen(fname.txt,r)=NULL)printf( 这是新表 n);return;fseek(fp,0L,2);size=ftell(fp);if(!size)printf( 这是空表 n);return;rewind(fp);p2=head-next;while(!feof(fp)/开始创建链表 /移动到文件首 /找到当前位置p1=(StudentNode *)malloc(sizeof(StudentNode);fscanf(fp,%s %s %s %d %d %d %d %f %f %f %f %f %fn,p1-IDNumber,p1-GivenName,-FamilyName,p1&p1-sex,&p1-BirthYear,&p1-BirthMonth,&p1-BirthDay,&p1-score0,&p1 core2,&p1-score3,&p1-sum, &p1-average);p1-next=NULL;/创建节点完if(head-next=NULL)head-next=p1;elsescore1,&p1-sp2-next=p1;p2=p1;n+;p2-next=NULL;fclose(fp);/*菜单*void menu()int c;show_menu();while(1)scanf(%d,&c);switch(c)getchar();case 1:input_stu();break;case 2:del_stu(); break;case 3:print_stu();break;case 4:search_name(); break;case 5:save();break;case 6:Loadf();break;case 7:jisuan(); break;case 8:search_clas(); break;case 9:insert_stu() ; break;case 10:search_NO(); break;case 11:arrage_stu();break;case 12:revise_stu(); break;case 13:jieduan();break;case 0:exit(0);/ 执行菜单选项show_menu();/*显示菜*void show_menu()PF(n);PF(n*菜*n);PF(tt* 1. 输 入 学 生 信 息*n);PF(tt* 2. 删 除 学 生 信 息*n);PF(tt* 3. 显示链表中所有记录信息*n);PF(tt* 4. 按照学生的姓查找记录*n);PF(tt* 5. 将链表中记录保存到文件中*n);PF(tt* 6. 从文件中读入记录*n);PF(tt* 7. 计算所有学生以及各科总分和均分*n);PF(tt* 8. 按班级查询显示学生信息*n);PF(tt* 9. 插入记录到表中*n);PF(tt* 10. 按学号查询学生信息*n);PF(tt* 11. 学生成绩排名*n);PF(tt* 12. 修改学生信息*n);PF(tt* 13. 按平均分阶段输出学生信息*n);PF(tt* 0. 退出*n);PF(*n);PF(n 请选择 n);/*输入学生信息*void input_stu()/输入学生信息float a,b; /a,b 分别用来存放该生的各科总成绩和平均成绩int y,j;y=time();n=0;StudentNode *p1=NULL,*p2=NULL;p1=( StudentNode *)malloc(sizeof(StudentNode);PF(n*n);PF(tt 输入学生学号 :t);scanf(%s,p1-IDNumber);PF(tt 输入学生的姓:t);scanf(%s,p1-FamilyName);PF(tt 输入学生的名:t);scanf(%s,p1-GivenName);输入学生信息/输入学生信息/学号/姓/名PF(tt 输入学生性别 (0 代表女, scanf(%d,&p1-sex);for(j=0;j+)正常1 代表男 ):t);/性别/ 判断输入年份是否合理,假设人年龄在0-100 岁之间为PF(tt 输入学生出生年:t);scanf(%d,&p1-BirthYear);/出生年if(y-p1-BirthYear)100|(p1-BirthYeary)PF(tt 年份输入错误不符合要求,请重新输入出生年份:t);elsebreak;for(j=0;j+)/判断输入月份是否合理PF(tt 输入学生出生月 :t);scanf(%d,&p1-BirthMonth);/出生月if(p1-BirthMonthBirthMonth12)PF(tt 月份输入错误不符合要求,请重新输入出生月份: t);elsebreak;for(j=0;j+)/ 判断输入出生日是否合理 PF(tt 输入学生出生日 :t);scanf(%d,&p1-BirthDay);/出生日if(p1-BirthDayBirthDay31)PF(tt 出生日输入错误不符合要求,请重新输入出生日: t);elsebreak;PF(tt 输入学生的外语成绩:t);scanf(%f,&p1-score0);/各科成绩PF(tt 输入学生的数学成绩:t);scanf(%f,&p1-score1);PF(tt 输入学生的 C 语言成绩 :t);scanf(%f,&p1-score2);PF(tt 输入学生的马哲成绩:t);scanf(%f,&p1-score3);a=p1-score0+p1-score1+p1-score2+p1-score3;/ 求该生的各科总成绩b=(a/4);p1-sum=a;p1-average=b;English=English+p1-score0;Math=Math+p1-score1;C=C+p1-score2;Mazhe=Mazhe+p1-score3;Sumc+=a;便按成绩排序Avrd+=b;放n+;if(head-next=NULL)head=(StudentNode *)malloc(LEN);head-next=p1; elsefor(p2=head;p2-next!=NULL;p2=p2-next);p2-next=p1;p1-next=NULL;save();/保存到文件/*/求该生的平均成绩/求学生英语总分/求学生数学总分/ 求学生 C 语言总分/求学生马哲总分/将各学生的总成绩输入到一个全局数组当中,方/将个学生的平均分输入到一个全局数组中存/* 找到最后的结点,然后将增加的结点挂在它上面*/显示链表中所有记录学生信息void print_stu() /学生信息浏览StudentNode *p=NULL;if(head=NULL)/判断链表是否为空PF(文档中无记录!n);return;for(p=head-next;p!=NULL;p=p-next)PF(*n);PF(t 学生学号:t%sn,p-IDNumber);PF(t 学生姓:t%sn,p-FamilyName);PF(t 学生名:t%sn,p-GivenName);PF(t 学生性别:t%dn,p-sex);/读出信息查看链表中所有记录学生信息PF(t 学生出生年:t%dn,p-BirthYear);PF(t 学生出生月:t%dn,p-BirthMonth);PF(t 学生出生日:t%dn,p-BirthDay);PF(t 学生英语成绩:t%fn,p-score0);PF(t 学生数学成绩:t%fn,p-score1);PF(t 学生 C 语言成绩 :t%fn,p-score2);PF(t 学生马哲成绩:t%fn,p-score3);PF(t 学生总成绩:t%fn,p-sum);PF(t 学生平均成绩:t%fn,p-average);/输出信息 ););PF(n);PF(t 各个学生总分分别为:for(n=0;nc;n+)PF(%ft,Sumn);PF(n);PF(t 各个学生平均分分别为:for(n=0;nnext;p!=NULL;p=p-next) /读出信息if(!strcmp(p-FamilyName, FamilyName)PF(tt 您查找的学生有: n);PF(n);PF(tt 学生学号:t%sn,p-IDNumber);PF(tt 学生姓:t%sn,p-FamilyName);PF(tt 学生名:t%sn,p-GivenName);PF(tt 学生性别:t%dn,p-sex);PF(tt学生出生年:t%dn,p-BirthYear);PF(tt学生出生月:t%dn,p-BirthMonth);PF(tt学生出生日:t%dn,p-BirthDay);PF(tt 学生英语成绩:t%fn,p-score0);PF(tt 学生数学成绩:t%fn,p-score1);PF(tt 学生 C 语言成绩 :t%fn,p-score2);PF(tt 学生马哲成绩:t%fn,p-score3);PF(tt 学生总成绩:t%fn,p-sum);PF(tt 学生平均成绩:t%fn,p-average);PF(n);/输出信息/没找到信息时的处理按照学生学号信息查找i=1;if(i!=1)PF( 无该姓氏学生信息!请查证: ); /* void search_NO() /学生学号信息查找int i=0;StudentNode *p=NULL;char IDNumber20;if(head=NULL)/判断链表是否为空PF(文档中无记录!n);return;PF(请输入学生学号:”);scanf(%s,IDNumber);for(p=head-next;p!=NULL;p=p-next)/读出信息if(!strcmp(p-IDNumber,IDNumber)PF(tt 您查找的学生是:n);PF(n);PF(tt 学生学号:t%sn,p-IDNumber);PF(tt 学生姓:t%sn,p-FamilyName);PF(tt 学生名:t%sn,p-GivenName);PF(tt 学生性别:t%dn,p-sex);PF(tt 学生出生年:t%dn,p-BirthYear);PF(tt 学生出生月:t%dn,p-BirthMonth);PF(tt学生出生日:t%dn,p-BirthDay);PF(tt学生英语成绩:t%fn,p-score0);PF(tt学生数学成绩:t%fn,p-score1);PF(tt 学生 C 语言成绩 :t%fn,p-score2);PF(tt学生马哲成绩:t%fn,p-score3);PF(tt 学生总成绩:t%fn,p-sum);PF(tt 学生平均成绩:t%fn,p-average);PF(n);/输出信息/没找到信息时的处理按照学生班级统计并输出总成绩i=1; if(!i) PF( 无该生信息!请查证: ); /* *void search_clas() /学生学号信息查找 int i=0,j=0;StudentNode *p=NULL;char a6,b6;if(head=NULL) /判断链表是否为空 PF(文档中无记录!n);return;PF(请输入学生班级:); scanf(%s,a);for(p=head-next;p!=NULL;p=p-next)/读出信息 for(j=0;jIDNumberj;if(a0=b0&a1=b1&a2=b2&a3=b3&a4=b4&a5=b5)PF(tt 您查找的班级学生有:n);PF(n);PF(tt 学生学号:t%sn,p-IDNumber);PF(tt 学生姓:t%sn,p-FamilyName);PF(tt 学生名:t%sn,p-GivenName);PF(tt 学生性别:t%dn,p-sex);PF(tt 学生出生年:t%dn,p-BirthYear);PF(tt 学生出生月:t%dn,p-BirthMonth);PF(tt学生出生日:t%dn,p-BirthDay);PF(tt学生英语成绩:t%fn,p-score0);PF(tt学生数学成绩:t%fn,p-score1);PF(tt 学生 C 语言成绩 :t%fn,p-score2);PF(tt学生马哲成绩:t%fn,p-score3);PF(tt 学生总成绩:t%fn,p-sum);PF(tt 学生平均成绩:t%fn,p-average);PF(n);i=1;/ 输出信息if(!i)PF( 无该班级信息!请查证: ); / 没找到信息时的处理/*修改学生信息* void revise_stu()int y,j,k=0,m=0;int i=0;float a,b;y=time();StudentNode *p=NULL;if(head=NULL) /判断链表是否为空PF(文档中无记录!n);return;char IDNumber20;PF(请输入学生的学号:t);scanf(%s,IDNumber);for(p=head-next;p!=NULL;p=p-next)if(!strcmp(p-IDNumber,IDNumber)/验证信息是否正确PF(tt 你要修改的学生是:n);PF(n);PF(tt 学生学号 :t%sn,p-IDNumber);PF(tt 学生姓:t%sn,p-FamilyName);PF(tt 学生名:t%sn,p-GivenName);PF(tt 学生性别 (0 代表女, 1 代表男 ):t%dn,p-sex);PF(tt 学生出生年:t%dn,p-BirthYear);PF(tt 学生出生月:t%dn,p-BirthMonth);PF(tt学生出生日:t%dn,p-BirthDay);PF(tt学生英语成绩:t%fn,p-score0);PF(tt学生数学成绩:t%fn,p-score1);PF(tt 学生 C 语言成绩 :t%fn,p-score2);PF(tt学生马哲成绩:t%fn,p-score3);PF(tt 学生总成绩:t%fn,p-sum);PF(tt 学生平均成绩:t%fn,p-average);PF(n);/输出要修改信息i=1;for(k=0;ksum=Sumk)break;for(m=0;maverage=Avrm)break;English=English-p-score0;Math=Math-p-score1;C=C-p-score2;Mazhe=Mazhe-p-score3;PF(tt 您修改学号为%s 的学生:/修改学生英语总分/修改学生数学总分/ 修改学生C 语言总分/修改学生马哲总分n,IDNumber);PF(n);strcpy(p-IDNumber,IDNumber);PF(tt 输入修改学生姓 :t);scanf(%s,p-FamilyName);PF(tt 输入修改学生名:t);scanf(%s,p-GivenName);PF(tt 输入修改学生性别 (0 代表女, 1 代表男 ):t);scanf(%d,&p-sex);0-100for(j=0;j+)/判断输入年份是否合理,假设人年龄在岁之间为正常PF(tt 输入学生出生年:t);scanf(%d,&p-BirthYear);/出生年if(y-p-BirthYear)100|(p-BirthYeary)PF(tt 年份输入错误不符合要求,请重新输入出生年份: t);elsebreak;for(j=0;j+)/判断输入月份是否合理PF(tt 输入学生出生月 :t);scanf(%d,&p-BirthMonth);/ 出生月if(p-BirthMonthBirthMonth12)PF(tt 月份输入错误不符合要求,请重新输入出生月份:t);elsebreak;for(j=0;j+)/ 判断输入出生日是否合理 PF(tt 输入学生出生日 :t);scanf(%d,&p-BirthDay);/出生日if(p-BirthDayBirthDay31)PF(tt 出生日输入错误不符合要求,请重新输入出生日: t);elsebreak;PF(tt 输入学生的外语成绩:t);scanf(%f,&p-score0);/修改的各科成绩PF(tt 输入学生的数学成绩:t);scanf(%f,&p-score1);PF(tt 输入学生的 C 语言成绩 :t);scanf(%f,&p-score2);PF(tt 输入学生的马哲成绩:t);scanf(%f,&p-score3);a=p-score0+p-score1+p-score2+p-score3; / 求该生的各科总成绩b=(a/4); p-sum=a; p-average=b;Sumk=p-sum;Avrm=p-average;English=English+p-score0;Math=Math+p-score1;C=C+p-score2;Mazhe=Mazhe+p-score3;PF(n);save();if(!i)PF( 无该生信息!请查证: );/* *void del_stu() int i=0;StudentNode *p=NULL; if(head=NULL) PF(文档中无记录!n);return; elsechar IDNumber20;/求该生的平均成绩/将新的总分修改原总分/将新的平均分修改原平均分/修改学生英语总分/修改学生数学总分/ 修改学生C 语言总分/修改学生马哲总分/输入修改信息/* 没找到信息时的处理*/删除学生信息/判断链表是否为空PF(请输入学生的学号:t);scanf(%s,IDNumber);for(p=head;p!=NULL;p=p-next)/验证信息是否正确if(!strcmp(p-next-IDNumber,IDNumber) PF(%sn,IDNumber);PF(tt 您要删除的学生是: n);PF(n);PF(tt 学生学号:t%sn,p-next-IDNumber);PF(tt 学生姓:t%sn,p-next-FamilyName);PF(tt 学生名:t%sn,p-next-GivenName);PF(tt 学生性别:t%dn,p-next-sex);PF(tt 学生出生年:t%dn,p-next-BirthYear);PF(tt 学生出生月:t%dn,p-next-BirthMonth);PF(tt 学生出生日:t%dn,p-next-BirthDay);PF(tt 学生英语成绩:t%fn,p-next-score0);PF(tt 学生数学成绩:t%fn,p-next-score1);PF(tt 学生 C 语言成绩 :t%fn,p-next-score2);PF(tt 学生马哲成绩:t%fn,p-next-score3);PF(tt 学生总成绩:t%fn,p-next-sum);PF(tt 学生平均成绩:t%fn,p-next-average);PF(n);/输出要删除的信息English=English-(p-next-score0);/ 修改学生英语总分Math=Math-(p-score1);/修改学生数学总分C=C-(p-next-score2);/修改学生 C 语言总分Mazhe=Mazhe-(p-next-score3);/修改学生马哲总分for(n=0;nnext-sum=Sumn)for(j=n;jc;j+)Sumj=Sumj+1;break;c-;/数据总数减一for(n=0;nnext-average=Avrn) for(j=n;jnext-next)printf( 第一个 n);p-next=p-next-next;elsep-next=NULL;n-;save();return; /if 的括号/大 for 循环的if(!i)PF( 无该生信息!请查证: );/ 没找到信息时的处理return; /else 的括号 save();/*将链表中记录保存到文件中*void save()printf(”*保存信息并结束/出错检测%d %d %f %f %f %f %f %f*nStudentNode *p=NULL;FILE *fp;char *filename=fname.txt;if(fp=fopen(fname.txt,w)=NULL) printf(n 打不开文件!n);return;if(head-next=NULL)printf(n 信息为空 !n);return;elsep=head-next;while(p!=NULL)fprintf(fp,%s %s %s %d %d n,p-IDNumber,p-FamilyName,p-GivenName, p-sex,p-BirthYear,p-BirthMonth,p-BirthDay,p-score0,p-score1,p-score2,p-score3,p-su m,p-average);/存入文件p=p-next;printf( 保存完毕 !n);fclose(fp);/计算所有学生以及各科总分和均分,可评估学校教学质量void jisuan()float sum=0,avr;int j;for(j=0;jnext;p!=NULL;p=p-next) PF(*n);PF(t 学生学号:t%sn,p-IDNumber);PF(t 学生姓:t%sn,p-FamilyName);PF(t 学生名:t%sn,p-GivenName);PF(t 学生性别:t%dn,p-sex);PF(t 学生出生年:t%dn,p-BirthYear);PF(t 学生出生月:t%dn,p-BirthMonth);PF(t 学生出生日:t%dn,p-BirthDay);PF(t 学生英语成绩:t%fn,p-score0);PF(t 学生数学成绩:t%fn,p-score1);PF(t 学生 C 语言成绩 :t%fn,p-score2);PF(t 学生马哲成绩:t%fn,p-score3);PF(t 学生总成绩:t%fn,p-sum);PF(t 学生平均成绩:t%fn,p-average);PF(n);/ 输出信息PF(t 各个学生总分分别为: );for(n=0;nc;n+)PF(%ft,Sumn);PF(n);PF(t 各个学生平均分分别为: );for(n=0;nIDNumber);PF(tt 输入插入学生的姓:t);scanf(%s,p1-FamilyName);PF(tt 输入插入学生的名:t);scanf(%s,p1-GivenName);/学号/姓/名插入/输入学生信息0-100 岁之间为PF(tt 输入插入学生性别 (0 代表女 ,1 代表男 ):t);scanf(%d,&p1-sex);for(j=0;j+)/性别/ 判断输入年份是否合理,假设人年龄在正常PF(tt 输入插入学生出生年:t);scanf(%d,&p1-BirthYear);/出生年if(y-p1-BirthYear)100|(p1-BirthYeary)PF(tt 年份输入错误不符合要求,请重新输入出生年份: t);elsebreak;for(j=0;j+)/判断输入月份是否合理PF(tt 输入插入学生出生月 :t);scanf(%d,&p1-BirthMonth);/出生月if(p1-BirthMonthBirthMonth12)PF(tt 月份输入错误不符合要求,请重新输入出生月份:t);elsebreak;for(j=0;j+)/判断输入出生日是否合理 PF(tt 输入插入学生出生日 :t);scanf(%d,&p1-BirthDay);/出生日if(p1-BirthDayBirthDay31)PF(tt 出生日输入错误不符合要求,请重新输入出生日: t);elsebreak;PF(tt 输入插入学生的外语成绩:t);scanf(%f,&p1-score0);/各科成绩PF(tt 输入插入学生的数学成绩:t);scanf(%f,&p1-score1);PF(tt 输入插入学生的 C 语言成绩 :t);scanf(%f,&p1-score2);PF(tt 输入插入学生的马哲成绩:t);scanf(%f,&p1-score3);a=p1-score0+p1-score1+p1-score2+p1-score3;b=(a/4);p1-sum=a;p1-average=b;English=English+p1-score0;Math=Math+p1-score1;C=C+p1-score2;Mazhe=Mazhe+p1-score3;Sumc+=a;按成绩排序Avrd+=b;按平均成绩阶段输出/求该生的各科总成绩/求该生的平均成绩/求学生英语总分/求学生数学总分/ 求学生C 语言总分/求学生马哲总分/将各学生的总成绩输入到一个全局数组当中/将各学生的平均分输入到一个全局数组当中,方便,方便n+;if(head-next=NULL)head=(StudentNode *)malloc(LEN);head-next=p1;elsefor(p2=head;p2-next!=NULL;p2=p2-next);/* 找到最后的结点,然后将增加的结点挂在它上面*/p2-next=p1;p1-next=NULL;save();/保存到文件/*学 生 成绩 排名 及基本 数据的统计 计算*void sort(float x,int n)int i,j,k;float t;for(i=0;in-1;i+)k=i;for(j=i+1;jxk)k=j;if(k!=i)t=xi;xi=xk;xk=t;/数组排序函数void search_allscore()int i=0,j=0;StudentNode *p=NULL;/按学生总分查找,用来输出排名。if(head=NULL)/判断链表是否为空PF(文档中无记录!n);return;for(j=0;jnext;p!=NULL;p=p-next)if(p-sum=Sumj)PF(tt 第 名:n,j+1);PF(tt 学生学号 :t%sn,p-IDNumber);PF(tt 学生姓:t%sn,p-FamilyName);PF(tt 学生名 :t%sn,p-GivenName);PF(tt 学生性别 :t%dn,p-sex);PF(tt 学生出生年:t%dn,p-BirthYear);PF(tt 学生出生月:t%dn,p-BirthMonth);PF(tt 学生出生日:t%dn,p-BirthDay);PF(tt 学生英语成绩:t%fn,p-score0);PF(tt 学生数学成绩:t%fn,p-score1);PF(tt 学生 C 语言成绩 :t%fn,p-score2);PF(tt 学生马哲成绩:t%fn,p-score3);PF(tt 学生总成绩:t%fn,p-sum);P
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!