武汉科技大学 C课程设计 学生成绩管理系统 链表.doc

上传人:laozhun 文档编号:3432434 上传时间:2023-03-13 格式:DOC 页数:22 大小:1.10MB
返回 下载 相关 举报
武汉科技大学 C课程设计 学生成绩管理系统 链表.doc_第1页
第1页 / 共22页
武汉科技大学 C课程设计 学生成绩管理系统 链表.doc_第2页
第2页 / 共22页
武汉科技大学 C课程设计 学生成绩管理系统 链表.doc_第3页
第3页 / 共22页
武汉科技大学 C课程设计 学生成绩管理系统 链表.doc_第4页
第4页 / 共22页
武汉科技大学 C课程设计 学生成绩管理系统 链表.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《武汉科技大学 C课程设计 学生成绩管理系统 链表.doc》由会员分享,可在线阅读,更多相关《武汉科技大学 C课程设计 学生成绩管理系统 链表.doc(22页珍藏版)》请在三一办公上搜索。

1、 二一二 二一三 学年第 一 学期电子技术学院课程设计报告书课程名称: C程序课程设计 班 级: 电信DB2011级1102班 学 号: xxxxxxxxxxxxxxx 姓 名: xxxx 指导教师: xxxx 二一二年 九 月一、需求分析1、题目二 学生成绩管理程序任务:自学C语言中相关知识,设计出学生成绩管理程序。要求如下所述:u 录入学生信息,每位学生录入的信息有:姓名、学号、性别、班级、和三门功课(数学,英语,计算机)的成绩。以文件(myfile.txt)的形式保存每个学生的所有信息。(实验中:假设3个班,每个班学生人数不得少于5人)学号 姓名 性别 班级 数学 英语 计算机 1101

2、 王鹏 男 1班 70 58 981102 李燕 女 2班 68 88 951103 赵亚芳 女 3班 58 48 96 u 增加学生记录,并将增加的信息以文件的(myfile.txt)的形式保存。u 删除学生记录,以“学号”、“姓名”为关键字删除记录,若要删除的记录不存在,给出必要的提示信息;u 统计各班级学生每门课程的班级平均分,并由高到低排序。u 按学号或者姓名查询记录并显示其三门功课成绩;u 能浏览显示全部学生成绩,若无记录可以显示,给出必要的提示信息;2、系统功能需求分析 该程序中需要有存储、读取外部文件的命令实现将信息储存于指定文件中。程序中需要有建立、修改链表的命令实现数据的动态

3、链表存储方式。程序还需要一系列的提示命令使程序的易用性提高。因为需要对数据进行统计或查询显示,所以需要有对链表数据统计和对链表指定数据进行查找的功能。二、概要设计文件读取模块数据保存模块成绩对比模块数据显示 模块数据查找模块数据删除模块数据增加模块成绩单建立模块学生成绩管理程序三、详细设计1、建立结构体struct studentint num; char name10,sex10; int Class,math,english,computer; struct student * next;int n;2、成绩单建立模块开始struct student *head,*p1,*p2; n=0;

4、 p1=p2=(struct student *)malloc(LEN);输入第一个学生的数据head=NULL;p1-num!=0 Y链表指针向后移动 N输入一个学生的数据输入学号为“0” Y Np2-next=NULL; return(head);结束struct student *creat(void)struct student *head,*p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN);printf(请输入学生信息(按学号顺序输入)n); printf(学号:); scanf(%d,&p1-num); printf(姓名:); sc

5、anf(%s,p1-name); printf(性别:); scanf(%s,p1-sex); printf(班级:); scanf(%d,&p1-Class); printf(数学:); scanf(%d,&p1-math); printf(英语:); scanf(%d,&p1-english); printf(计算机:); scanf(%d,&p1-computer); head=NULL; while(1)n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct student *)malloc(LEN); printf(n请输

6、入学生信息(按学号顺序输入)当不再输入时在学号处输入0结束n); printf(学号:);scanf(%d,&p1-num); if(p1-num=0)break; else printf(姓名:); scanf(%s,p1-name); printf(性别:); scanf(%s,p1-sex); printf(班级:); scanf(%d,&p1-Class); printf(数学:); scanf(%d,&p1-math); printf(英语:); scanf(%d,&p1-english); printf(计算机:); scanf(%d,&p1-computer); p2-next=

7、NULL; return(head);3、数据增加模块开始struct student *p0,*p1,*p2; p1=head; p0=stud;phead; p0=stud;输入一个学生的数据根据学号顺序找到数据应该插入的位置phead; p0=stud;插入数据 返回头指针phead; p0=stud;结束struct student *insert(struct student *head,struct student *stud)struct student *p0,*p1,*p2;p1=head; p0=stud;if(head=NULL) head=p0; p0-next=NUL

8、L;elsewhile(p0-nump1-num)&(p1-next!=NULL)p2=p1; p1=p1-next;if(p0-numnum)if(head=p1) head=p0;else p2-next=p0;p0-next=p1;else p1-next=p0; p0-next=NULL;n+;printf(n增加成功!n);return(head);4、数据删除模块开始struct student *p1,*p2;输入删除的学号(姓名)链表中有该数据p1=head Y Yhead=p1-next Np2-next=p1-next;printf(“不到该数据!n);结束struct s

9、tudent *del1(struct student *head,int num)struct student *p1,*p2;if(head=NULL) printf(n表格不存在!n); return(head);p1=head;while(num!=p1-num)&(p1-next!=NULL)p2=p1; p1=p1-next;if(num=p1-num)if(p1=head) head=p1-next;else p2-next=p1-next;printf(n删除成功!n);n-;else printf(n找不到该数据!n);return(head);struct student

10、*del2(struct student *head,char *name)struct student *p1,*p2;if(head=NULL) printf(n表格不存在!n); return(head);p1=head;while(strcmp(name,p1-name)!=0)&(p1-next!=NULL)p2=p1; p1=p1-next;if(strcmp(name,p1-name)=0)if(p1=head) head=p1-next;else p2-next=p1-next;printf(n删除成功!n);n-;else printf(n找不到该数据!n);return(h

11、ead);5、数据查找模块 开始struct student *p=head;输入查找的学号(姓名)num=p-num 或strcmp(name,p-name)=0 N Y输出数据 Yp=p-next Np!=NULL Y结束void find1(struct student *head,int num)struct student *p=head;if(head!=NULL) doif(num=p-num)printf(n学号 姓名 性别 班级 数学 英语 计算机n); printf(-n); printf(%d %-6s %s %d %-3d %-3d %-3dn,p-num,p-name

12、,p-sex,p-Class,p-math,p-english,p-computer); break; else p=p-next;while(p!=NULL);if(p=NULL) printf(n未找到相应信息!n);else printf(n成绩单为空!n);void find2(struct student *head,char *name)struct student *p=head;if(head!=NULL)doif(strcmp(name,p-name)=0)printf(n学号 姓名 性别 班级 数学 英语 计算机n); printf(-n); printf(%d %-6s

13、%s %d %-3d %-3d %-3dn,p-num,p-name,p-sex,p-Class,p-math,p-english,p-computer); break;else p=p-next;while(p!=NULL);if(p=NULL) printf(n未找到相应信息!n);else printf(n成绩单为空!n);void print(struct student *head)struct student *p;p=head;if(head!=NULL)printf(学号 姓名 性别 班级 数学 英语 计算机n);printf(-n); do printf(%d %-6s %s

14、 %d %-3d %-3d %-3dn,p-num,p-name,p-sex,p-Class,p-math,p-english,p-computer); p=p-next;while(p!=NULL);else printf(无信息!n);6、数据显示模块开始struct student *p; p=head;head!=NULL Y输出一个学生的数据 Np=p-next;p!=NULL Y结束 Nvoid print(struct student *head)struct student *p;p=head;if(head!=NULL)printf(学号 姓名 性别 班级 数学 英语 计算机

15、n);printf(-n); do printf(%d %-6s %s %d %-3d %-3d %-3dn,p-num,p-name,p-sex,p-Class,p-math,p-english,p-computer); p=p-next;while(p!=NULL);else printf(无信息!n);7、成绩对比模块开始struct student *p; p=head; float sum1=0,sum2=0,sum3=0,average1,average2,average3,n1=0,n2=0,n3=0;p!=NULL Np-Class=1 Y Ysum1=sum1+p-math(

16、englishi/computer); n1+; Np-Class=2 Ysum1=sum1+p-math(englishi/computer); n1+;p-Class=3 N Ysum1=sum1+p-math(englishi/computer); n1+;p=p-next;算出各班平均分并比较输出成绩对比结果结束void compare(struct student *head)struct student *p;p=head;float sum1=0,sum2=0,sum3=0,average1,average2,average3,n1=0,n2=0,n3=0;printf( 数学班

17、级平均分 n);printf(-n);while(p!=NULL)if(p-Class=1) sum1=sum1+p-math; n1+;if(p-Class=2) sum2=sum2+p-math; n2+;if(p-Class=3) sum3=sum3+p-math; n3+;p=p-next;average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if(average1=average2)&(average1=average3)if(average2=average3)printf(1班:%.2f 2班:%.2f 3班:%.2fn,ave

18、rage1,average2,average3);elseprintf(1班:%.2f 3班:%.2f 2班:%.2fn,average1,average3,average2); else if(average2=average1)&(average2=average3)if(average1=average3)printf(2班:%.2f 1班:%.2f 3班:%.2fn,average2,average1,average3);elseprintf(2班:%.2f 3班:%.2f 1班:%.2fn,average2,average3,average1);elseif(average1=ave

19、rage2)printf(3班:%.2f 1班:%.2f 2班:%.2fn,average3,average1,average2);else printf(3班:%.2f 2班:%.2f 1班:%.2fn,average3,average2,average1);p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;printf(n 英语班级平均分 n);printf(-n);while(p!=NULL)if(p-Class=1) sum1=sum1+p-english; n1+;if(p-Class=2) sum2=sum2+p-english; n2+;if(

20、p-Class=3) sum3=sum3+p-english; n3+;p=p-next;average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if(average1=average2)&(average1=average3)if(average2=average3)printf(1班:%.2f 2班:%.2f 3班:%.2fn,average1,average2,average3);elseprintf(1班:%.2f 3班:%.2f 2班:%.2fn,average1,average3,average2); else if(average

21、2=average1)&(average2=average3)if(average1=average3)printf(2班:%.2f 1班:%.2f 3班:%.2fn,average2,average1,average3);elseprintf(2班:%.2f 3班:%.2f 1班:%.2fn,average2,average3,average1);elseif(average1=average2)printf(3班:%.2f 1班:%.2f 2班:%.2fn,average3,average1,average2);else printf(3班:%.2f 2班:%.2f 1班:%.2fn,av

22、erage3,average2,average1);p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;printf(n 计算机班级平均分 n);printf(-n);while(p!=NULL)if(p-Class=1) sum1=sum1+p-computer; n1+;if(p-Class=2) sum2=sum2+p-computer; n2+;if(p-Class=3) sum3=sum3+p-computer; n3+;p=p-next;average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if(

23、average1=average2)&(average1=average3)if(average2=average3)printf(1班:%.2f 2班:%.2f 3班:%.2fn,average1,average2,average3);elseprintf(1班:%.2f 3班:%.2f 2班:%.2fn,average1,average3,average2); else if(average2=average1)&(average2=average3)if(average1=average3)printf(2班:%.2f 1班:%.2f 3班:%.2fn,average2,average1

24、,average3);elseprintf(2班:%.2f 3班:%.2f 1班:%.2fn,average2,average3,average1);elseif(average1=average2)printf(3班:%.2f 1班:%.2f 2班:%.2fn,average3,average1,average2);else printf(3班:%.2f 2班:%.2f 1班:%.2fn,average3,average2,average1);8、数据保存模块void save(struct student *head) struct student *p; FILE *fp; fp=fop

25、en(myfile.txt,wb); p=head; while(p!=NULL) fwrite(p,LEN,1,fp); p=p-next; fclose(fp); printf(保存成功!n);9、数据读取模块struct student *load() struct student *head,*p1,*p2; FILE *fp; n=0; head=NULL; fp=fopen(myfile.txt,rb); head=p2=p1=(struct student *)malloc(LEN); while(fread(p1,LEN,1,fp)=1)p2=p1; p1=(struct st

26、udent *)malloc(LEN); p2-next=p1; n+; p2-next=NULL; fclose(fp);printf(读取成功!n); return(head); 10、主函数void main()system(color 0B);struct student *head=NULL,*stu;int num,choice;char name10; while(1)system(pause); system(cls);printf(# # # # # # # # # # # # # # # # # # # # # # # #n);printf(# #n);printf(# 学

27、生成绩管理系统菜单 #n);printf(#-#n); printf(# 1.创建学生成绩单 #n);printf(#-#n); printf(# 2.增加学生信息 #n); printf(#-#n); printf(# 3.删除学生信息 #n);printf(#-#n); printf(# 4.查看学生信息 #n);printf(#-#n);printf(# 5.显示所有学生信息 #n);printf(#-#n); printf(# 6.班级成绩对比 #n);printf(#-#n); printf(# 7.保存至文件 #n);printf(#-#n); printf(# 8.从文件中读取信

28、息 #n);printf(#-#n); printf(# 9.退出系统 #n);printf(# #n);printf(# # # # # # # # # # # # # # # # # # # # # # # #n);printf(n请选择所需功能:); scanf(%d,&choice);printf(n); switch(choice) case 1: head=creat(); break; case 2: stu=(struct student *)malloc(LEN); printf(请输入学生信息n); printf(学号:); scanf(%d,&stu-num); prin

29、tf(姓名:); scanf(%s,stu-name); printf(性别:); scanf(%s,stu-sex); printf(班级:); scanf(%d,&stu-Class); printf(数学:); scanf(%d,&stu-math); printf(英语:); scanf(%d,&stu-english); printf(计算机:); scanf(%d,&stu-computer); while(1) head=insert(head,stu); printf(请继续输入学生信息(按0退出)n); stu=(struct student *)malloc(LEN); p

30、rintf(学号:); scanf(%d,&stu-num); if(stu-num=0) break; printf(姓名:); scanf(%s,stu-name); printf(性别:); scanf(%s,stu-sex); printf(班级:); scanf(%d,&stu-Class); printf(数学:); scanf(%d,&stu-math); printf(英语:); scanf(%d,&stu-english); printf(计算机:); scanf(%d,&stu-computer); break; case 3: printf(1.按学号删除 2.按姓名删除n请选择:); scanf(%d,&choice); switch(choice) case 1: printf(输入要删除的学生学号(按0退出):); scanf(%d,&num); while(num!=0) head=del1(head,num); printf(输入要删除的学生学号(按0退出):);

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号