学生成绩管理系统源程序.doc

上传人:仙人指路1688 文档编号:2385929 上传时间:2023-02-17 格式:DOC 页数:26 大小:87KB
返回 下载 相关 举报
学生成绩管理系统源程序.doc_第1页
第1页 / 共26页
学生成绩管理系统源程序.doc_第2页
第2页 / 共26页
学生成绩管理系统源程序.doc_第3页
第3页 / 共26页
学生成绩管理系统源程序.doc_第4页
第4页 / 共26页
学生成绩管理系统源程序.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《学生成绩管理系统源程序.doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统源程序.doc(26页珍藏版)》请在三一办公上搜索。

1、#include #include #include #define PF printf#include time.h #define LEN sizeof(struct St1)/定义结构体/typedef struct St1 char IDNumber16;/*学号*/ char FamilyName16; /*姓*/ char GivenName16; /*名*/ int sex; /*性别(0代表女,1代表男)*/ int BirthYear; /*出生年*/ int BirthMonth; /*出生月*/ int BirthDay; /*出生日*/ float score0,sco

2、re1,score2,score3; /*成绩*/ float sum; /*总分*/ float average; /*平均分*/ struct St1 *next; StudentNode;int time()struct tm* ptm;long ts;int y,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-

3、tm_sec; /秒return(y); StudentNode *head=NULL; /全局指针 int n,i=0,c=0,d=0,j=0; /全局变量 j在函数中作数组下标或循环变量 c为总分数组中元素个数 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(); /显示

4、链表中所有记录信息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

5、search_allscore(); /按学生总成绩查询,用来输出排名信息void jieduan(); /用来输出按平均分阶段输出信息,其中用了按平均分输出信息的程序。void Loadf(); /从文件中读出所有学生记录void main() printf(*); printf(n);printf( 欢迎来到学生管理系统 !); printf(n); printf(n); printf( 制作人:陈志52101610); creat_stu(); menu();/*创建链表*void creat_stu() FILE *fp; long size; StudentNode *p1,*p2;

6、 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); fsca

7、nf(fp,%s %s %s %d %d %d %d %f %f %f %f %f %fn,p1-IDNumber,p1-FamilyName,p1-GivenName, &p1-sex,&p1-BirthYear,&p1-BirthMonth,&p1-BirthDay,&p1-score0,&p1-score1,&p1-score2,&p1-score3,&p1-sum, &p1-average); p1-next=NULL; /创建节点完 if(head-next=NULL) head-next=p1; else p2-next=p1; p2=p1; n+; p2-next=NULL; f

8、close(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_

9、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

10、); 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() /输入学生信息fl

11、oat 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

12、代表女,1代表男):t); scanf(%d,&p1-sex); /性别 for(j=0;j+) /判断输入年份是否合理,假设人年龄在0-100岁之间为正常 PF(tt输入学生出生年:t); scanf(%d,&p1-BirthYear); /出生年 if(y-p1-BirthYear)100|(p1-BirthYeary) PF(tt年份输入错误不符合要求,请重新输入出生年份:t); else break;for(j=0;j+) /判断输入月份是否合理 PF(tt输入学生出生月:t); scanf(%d,&p1-BirthMonth); /出生月 if(p1-BirthMonthBirthM

13、onth12) PF(tt月份输入错误不符合要求,请重新输入出生月份:t); else break;for(j=0;j+) / 判断输入出生日是否合理 PF(tt输入学生出生日:t); scanf(%d,&p1-BirthDay); /出生日 if(p1-BirthDayBirthDay31) PF(tt出生日输入错误不符合要求,请重新输入出生日:t); else break; PF(tt输入学生的外语成绩:t); scanf(%f,&p1-score0); /各科成绩 PF(tt输入学生的数学成绩:t); scanf(%f,&p1-score1); PF(tt输入学生的C语言成绩:t); s

14、canf(%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; /求学生C语言总分 Mazhe=Mazhe+p1-score3; /求学生马哲总分 Sumc+=a; /将各学生的总成绩

15、输入到一个全局数组当中,方便按成绩排序 Avrd+=b; /将个学生的平均分输入到一个全局数组中存放 n+; if(head-next=NULL) head=(StudentNode *)malloc(LEN); head-next=p1; else for(p2=head;p2-next!=NULL;p2=p2-next); /*找到最后的结点,然后 将增加的结点挂在它上面*/ p2-next=p1; p1-next=NULL; save();/保存到文件/*显示链表中所有记录学生信息*void print_stu() /学生信息浏览StudentNode *p=NULL; if(head=

16、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学生英语成

17、绩: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, Fa

18、milyName) 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语言成绩

19、: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(请输入学生学号:);

20、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

21、,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

22、 *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-GivenN

23、ame); 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; /输出

24、信息 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) /验证信息

25、是否正确 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

26、学生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; /修改学生C语言总分 Mazhe=Mazhe-p-score3; /修改学生马

27、哲总分 PF(tt您修改学号为%s的学生: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); for(j=0;j+) /判断输入年份是否合理,假设人年龄在0-100岁之间为正常 PF(tt输入学生出生年:t); scanf(%d,&p-BirthYear); /出生年 if(y-p-BirthYe

28、ar)100|(p-BirthYeary) PF(tt年份输入错误不符合要求,请重新输入出生年份:t); else break; for(j=0;j+) /判断输入月份是否合理 PF(tt输入学生出生月:t); scanf(%d,&p-BirthMonth); /出生月 if(p-BirthMonthBirthMonth12) PF(tt月份输入错误不符合要求,请重新输入出生月份:t); else break; for(j=0;j+) / 判断输入出生日是否合理 PF(tt输入学生出生日:t); scanf(%d,&p-BirthDay); /出生日 if(p-BirthDayBirthDay

29、31) PF(tt出生日输入错误不符合要求,请重新输入出生日:t); else break; 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; /修改学生C语言总分 Mazh

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号