版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学生成绩管理系统学 院 _专 业 _班 级 _学 号 _ 姓 名 _课 题 _ 指导教师 _报告成绩_摘 要为了进一步提高C语言编程及调试能力,更好的把数据结构融合到开发当中,采用结构化设计自顶向下、逐步求精的方法进行编写,本系统本着低耦合、高内聚的开发理念,将系统分为几大模块,便于控制和管理,在本次开发过程中大量使用了链表和文件操作,包括用户名以及密码的保存,学生信息的基本操作主要通过链表实现,以文件形式进行存储。本文介绍课程设计课题的选题意义,说明了本系统提供的主要功能,对设计思路、功能模块、流程图、中心算法进行了详细的说明,并画出流程框图,并提供了系统的主要功能模块代码。通过本课程设计,
2、使自己更加系统地理解和掌握数据结构的基本概念;能自如地根据实际要求,设计相应的数据结构,并运用C语言实现所设计的算法,编写较大型的程序,分析和解决实际应用问题,进一步加深、巩固所学专业课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握C语言独立的编写、调试应用程序和进行其它相关设计的技能。关键词:结构体;流程图;链表;文件目 录1 绪 论41.1系统概述41.2 课题研究目的与意义42 课程设计要求52.1 系统功能要求52.2 技术可行性53 设计题目分析63.1 题目简介63.2 设计要求64 课程设计要求74.1 总体设计74.2 详细设计74.3 调试与
3、测试75 设计心得与总结86 参考文献91 绪 论1.1 系统概述本系统为管理学生成绩提供了便利,系统主要通过链表形式实现,通过文件进行存储,主要功能模块包括管理员登录,注册,学生信息的增加、删除、修改、查找学生信息等。登录、注册模块主要通过链表和文件实现。1.2 课题研究目的与意义通过本次课程设计,使自己巩固C语言基础,加深对数据结构链表以及文件操作的理解,按照结构化的自顶向下、逐步求精的方法进行开发,能自如地根据实际要求,设计相应的数据结构,并运用C语言实现所设计的算法,编写较大型的程序,分析和解决实际应用问题。同时通过对程序的开发以及论文的编写,让自己可以在开发的同时兼顾文档的管理。2
4、课程设计要求2.1 系统功能要求1. 用C语言实现系统;2. 系统登录功能的实现;3. 注册功能的实现(用链表和文件实现);4. 对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出;5. 学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:1) 每一条记录包括一个学生的学号、姓名、3门课成绩;2) 成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入;3) 成绩信息显示浏览功能,完成全部学生记录的显示;4) 查询功能:完成按姓名查找学生记录,并显示;5) 成绩信息的删除:按学号进行删
5、除某学生的成绩;6) 排序功能:按学生平均成绩进行排序;7) 应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。2.2 可行性分析1. 经济可行性成绩管理系统版本形形色色,本系统纯粹为了个人学习开发,在个人PC上进行开发,开发工具为Dev C+,工具小巧方便,为系统的编写提供了便利。2. 技术可行性本系统主要通过链表、文件、结构体等实现,在此之前有着各种各样的学生成绩管理系统,证明该系统是可行的。3 设计题目分析3.1 题目简介学生成绩管理系统主要对学生成绩信息进行管理,每个学生是一条记录,包括姓名,学号,每门课的成绩等。3.2 设计要求学生成绩管理系统严格按照结构化
6、的设计方法,自顶向下、逐步求精,从搭建整体框架到依次实现,以下是具体要求:1. 用C语言结构体、链表、文件实现程序设计;2. 利用链表实现学生信息的数据结构设计;3. 系统的各个功能模块要求用函数的形式实现,每个功能模块分工明确;4. 界面友好(良好的人机交互),程序加必要的注释。4 课程设计要求4.1 总体设计学生成绩管理系统流程图:主要包括登录模块,学生成绩管理两大模块。程序主框架如下图所示:图4.14.2 详细设计1. 登录模块:初步使用链表以及文件实现图4.22. 功能模块:图4.34.3 函数说明public.h:包括各种头文件以及结构体的声明。main.c:主函数。menu.c:菜
7、单函数。func.c:学生成绩管理相关函数,增删改查。4.4 调试与测试系统编写过程中因为对指针的操作不熟练导致许多错误,通过单步调试一步一步进行调试可以很好的规避错误,由于对逻辑结构掌握不清楚,导致程序结构设计不合理,程序时间复杂度过大,通过翻阅资料,使程序的结构合理化。菜单界面运行如下:图4-1菜单界面输入函数界面运行如下:图4-2 输入函数界面查询信息模块运行如下:图4-3 查询信息界面删除模块运行界面如下:图4-4 删除模块界面插入模块运行界面如下: 图4-5 插入模块界面显示信息模块运行界面如下:图4-6 显示信息模块界面信息读取模块运行界面如下: 图4-7 信息读取模块界面信息保存
8、模块界面运行如下:图4-8信息保存模块界面排序模块运行界面如下:图4-9排序模块界面 5 设计心得与总结通过对学生成绩管理系统的编写使自己的C语言编程能力有了质的提高,学习到了如何模块化的分析及设计系统,成功地运用各类函数、循环变量、结构化的程序设计,以及结构体、指针的使用。但在学习中发现,编程确实不是很好做的,并非是你想要就能完成的,它需要的是认真、仔细地对待每一个程序块,特别是在对指针的使用时更加困难,那些指针指来指去,一不小心就会看错,编译不出来。经过这次课程设计,我发现自己不少的不足之处,我将会在以后的学习中把它们改正过来,努力学到更多的知识。6 参考文献1 谭浩强. C程序设计. 北
9、京:清华大学出版社,20052 高一凡. 数据结构算法解析. 北京:清华大学出版社,20083 姜灵芝. C语言课程设计案例精编. 北京:清华大学出版社,20084 严蔚敏. 数据结构(C语言版). 北京:清华大学出版社,19975 Brian WKernighan C程序设计语言 徐宝文译 机械工业出版社,20047 附录主函数:main.c#include public.hint main() Stu_score *head = NULL; int no;while(1)no = menu();system(cls);switch(no) case 1: head = creat();br
10、eak; case 2: head = load(head);break; case 3: search(head);break; case 4: head = del(head); break; case 5: head = Insert(head);break; case 6: print(head); break; /*case 7: statistics(head); break;*/ case 8: save(head);break; case 9: sort(head);break; case 0: exit(0); default: printf(输入错误,请重试!n);getc
11、har();头文件:public.h:#include#include #include #include #include #define LEN sizeof(struct student)typedef struct student/定义结构体int num;char name32;float score;float Chinese;float English;float math;float sum;float ave;struct student *next;Stu_score;菜单函数:menu.h#include int menu()/菜单函数 int i; int no; sy
12、stem(cls); for(i = 0; i 80; i+)printf(*); printf(ttt*欢迎进入学生成绩管理系统*n); for(i = 0; i 80; i+)printf(*); printf(*t1: 输入学生记录tt6: 输出学生成绩t*n); printf(*t2: 读取学生信息tt7: 统计学生成绩t*n);printf(*t3: 查询学生成绩tt8: 保存学生信息t*n);printf(*t4: 删除学生记录tt9: 成绩排序t*n);printf(*t5: 插入学生信息tt0: 退出系统t*n);for(i = 0; i next = p;q = p;p-nu
13、m = no;printf(输入学生姓名n);scanf(%s, p-name);printf(输入语文成绩n);scanf(%f, &p-Chinese); printf(输入数学成绩n);scanf(%f, &p-math);printf(输入英语成绩n);scanf(%f, &p-English); p-sum = p-Chinese + p-math + p-English;p-ave = p-sum/3;printf(继续输入,输入0返回主界面);scanf(%d, &no);if(no != 0)p = (Stu_score*)malloc(LEN);p-next = NULL;r
14、eturn head; void print(Stu_score *head)/输出函数Stu_score *p = NULL;system(cls);p = head;if(head != NULL)printf(-n); printf(|学号t|姓名t|语文t|英语t|数学t|总分t|平均分t|n); printf(-n); while(p != NULL)printf(|%dt|%st|%.1ft|%.1ft|%.1ft|%.1ft|%.1ft|n, p-num, p-name, p-Chinese, p-English, p-math, p-sum, p-ave);p = p-next
15、;elseprintf(表为空!);Stu_score *del(Stu_score *head)/删除函数 Stu_score *p, *q; int num; printf(输入要删除的学生的学号,输0退出:); scanf(%d, &num); getchar(); while(num != 0) if(head = NULL) printf(n表中无元素!n); return head; p = head; while(num != p-num & p-next != NULL) q = p;p = p-next; if(num = p-num) if(p = head) head =
16、 p-next; else q-next = p-next; free(p); system(cls); printf(删除成功n); Sleep(1000); else printf(不存在此学生!n); return head; system(cls); printf(输入学号继续删除,输0退出:); scanf(%d, &num);return head; /待调试 Stu_score *load(Stu_score *head)/读取文件信息 int n;FILE *fp; Stu_score *p = NULL;Stu_score *q = NULL; if(fp=fopen(E:成
17、绩管理系统.txt, r+)=NULL) printf(不能打开文件!n); return NULL; fscanf(fp, -n); fscanf(fp, |学号t|姓名t|语文t|英语t|数学t|总分t|平均分t|n); fscanf(fp, -n); printf(-n); printf(|学号t|姓名t|语文t|英语t|数学t|总分t|平均分t|n); printf(-n); p = (Stu_score *)malloc(LEN); fscanf(fp, %d%s%f%f%f%f%f, &p-num, p-name, &p-Chinese, &p-English, &p-math,
18、&p-sum, &p-ave); printf(|%dt|%st|%.1ft|%.1ft|%.1ft|%.1ft|%.1ft|n, p-num, p-name, p-Chinese, p-English, p-math, p-sum, p-ave); head = NULL; while(feof(fp) n = n + 1; if(n = 1) head = p; else q-next = p; q = p; if(feof(fp) p = (Stu_score *)malloc(LEN); fscanf(fp, %d%s%f%f%f%f%fn, &p-num, p-name, &p-Ch
19、inese, &p-English, &p-math, &p-sum, &p-ave); printf(|%dt|%st|%.1ft|%.1ft|%.1ft|%.1ft|%.1ft|n, p-num, p-name, p-Chinese, p-English, p-math, p-sum, p-ave); p-next = NULL; fclose(fp); return head;/用尾插法插入学生记录 Stu_score *Insert(Stu_score *head)int no;Stu_score *isrt = NULL;Stu_score *p = NULL;printf(n输入要
20、增加的学生学号,输0退出!n); scanf(%d, &no); while(no != 0)isrt = (Stu_score *)malloc(LEN);isrt-num = no; printf(输入学生姓名:); scanf(%s, isrt-name); printf(输入语文成绩:); scanf(%f, &isrt-Chinese); printf(输入英语成绩:); scanf(%f, &isrt-English); printf(输入数学成绩:); scanf(%f, &isrt-math); isrt-sum = isrt-Chinese + isrt-math + isr
21、t-English; isrt-ave = isrt-sum/3.0; if(head = NULL) printf(表为空,将建立一个学生信息表); head = isrt; isrt-next = NULL; else p = head; while(p-next != NULL) p = p-next; if(p-next = NULL); p-next = isrt; isrt-next = NULL; printf(继续插入,输入学号);scanf(%d, &no); return head;int save(Stu_score *head) /保存函数Stu_score *p =
22、NULL; FILE *fp; if(fp=fopen(E:成绩管理系统.txt, w+)=NULL) printf(不能打开文件!n); return 0; p = head; fprintf(fp, -n); fprintf(fp, |学号t|姓名t|语文t|英语t|数学t|总分t|平均分t|n); fprintf(fp, -n); while(p != NULL) fprintf(fp, %dt%st%.1ft%.1ft%.1ft%.1ft%.1fn, p-num, p-name, p-Chinese, p-English, p-math, p-sum, p-ave); p = p-ne
23、xt; fclose(fp); printf(文件已经保存!n); return 0;Stu_score *search(Stu_score *head)/查询函数int num; Stu_score *p,*q; printf(输入要查询的学生的学号: ); scanf(%d, &num); printf(-n); printf(|学号t|姓名t|语文t|英语t|数学t|总分t|平均分t|n); printf(-n); while(num != 0) if(head = NULL) printf(n表为空,无任何学生记录!n); Sleep(500); return(head); p = h
24、ead; while(num != p-num & p-next != NULL) q = p;p = p-next; if(num = p-num) printf(|%dt|%st|%.1ft|%.1ft|%.1ft|%.1ft|%.1ft|n, p-num, p-name, p-Chinese, p-English, p-math, p-sum, p-ave); printf(-n); else printf(不存在此学生!n);getchar();return head; printf(继续输入,输0退出: ); scanf(%d, &num);return(head);Stu_scor
25、e *sort(Stu_score *head)/排序函数 Stu_score *p, *max; int i; int no; for(i = 0; i 80; i+) printf(*); printf(1按学生学号排序tt2按语文成绩排序tt3按英语成绩排序n); printf(4按数学成绩排序tt5按平均分排序tt6按总分排序n); for(i = 0; i 80; i+) printf(*); printf(请选择操作,输入0退出:); scanf(%d, &no); while(no != 0) switch(no) case 1 : sortbynum(head); break;
26、 case 2 :sortbyCh_zn(head); break; case 3 : sortbymath(head); break; case 4 : sortbyEn(head); break; case 5 : sortbyave(head); break; case 6 : sortbysum(head); break; default :printf(输入错误,请重试! n);getchar();getchar();system(cls);for(i = 0; i 80; i+) printf(*); printf(1按学生学号排序tt2按语文成绩排序tt3按英语成绩排序n); p
27、rintf(4按数学成绩排序tt5按平均分排序tt6按总分排序n); for(i = 0; i next) for(q = p-next; q != NULL; q = q-next)if(q-num num) num = p-num; p-num = q-num; q-num = num; strcpy(name, p-name);strcpy(p-name, q-name);strcpy(q-name, name);Chinese = p-Chinese;p-Chinese = q-Chinese;q-Chinese = Chinese;math = p-math;p-math = q-m
28、ath;q-math = math;English = p-English;p-English = q-English;q-English = English;ave = p-ave;p-ave = q-ave;q-ave = ave;sum = p-sum;p-sum = q-sum;q-sum = sum; print(head); return head;Stu_score *sortbyCh_zn(Stu_score *head)int num;char name32;float score;float Chinese;float English;float math;float su
29、m;float ave;Stu_score *tmp = NULL;Stu_score *p = NULL;Stu_score *q = NULL;if(head = NULL) printf(n没有任何学生资料,请先建立链表!n);return(head);for(p = head; p != NULL; p = p-next) for(q = p-next; q != NULL; q = q-next)if(q-Chinese Chinese) num = p-num; p-num = q-num; q-num = num; strcpy(name, p-name);strcpy(p-na
30、me, q-name);strcpy(q-name, name);Chinese = p-Chinese;p-Chinese = q-Chinese;q-Chinese = Chinese;math = p-math;p-math = q-math;q-math = math;English = p-English;p-English = q-English;q-English = English;ave = p-ave;p-ave = q-ave;q-ave = ave;sum = p-sum;p-sum = q-sum;q-sum = sum; print(head); return he
31、ad;Stu_score *sortbymath(Stu_score *head)int num;char name32;float score;float Chinese;float English;float math;float sum;float ave;Stu_score *tmp = NULL;Stu_score *p = NULL;Stu_score *q = NULL;if(head = NULL) printf(n没有任何学生资料,请先建立链表!n);return NULL;for(p = head; p != NULL; p = p-next) for(q = p-next
32、; q != NULL; q = q-next)if(q-math math) num = p-num; p-num = q-num; q-num = num; strcpy(name, p-name);strcpy(p-name, q-name);strcpy(q-name, name);Chinese = p-Chinese;p-Chinese = q-Chinese;q-Chinese = Chinese;math = p-math;p-math = q-math;q-math = math;English = p-English;p-English = q-English;q-Engl
33、ish = English;ave = p-ave;p-ave = q-ave;q-ave = ave;sum = p-sum;p-sum = q-sum;q-sum = sum; print(head); return head;Stu_score *sortbyEn(Stu_score *head)int num;char name32;float score;float Chinese;float English;float math;float sum;float ave;Stu_score *tmp = NULL;Stu_score *p = NULL;Stu_score *q =
34、NULL;if(head = NULL) printf(n没有任何学生资料,请先建立链表!n);return NULL;for(p = head; p != NULL; p = p-next) for(q = p-next; q != NULL; q = q-next)if(q-English English) num = p-num; p-num = q-num; q-num = num; strcpy(name, p-name);strcpy(p-name, q-name);strcpy(q-name, name);Chinese = p-Chinese;p-Chinese = q-Chi
35、nese;q-Chinese = Chinese;math = p-math;p-math = q-math;q-math = math;English = p-English;p-English = q-English;q-English = English;ave = p-ave;p-ave = q-ave;q-ave = ave;sum = p-sum;p-sum = q-sum;q-sum = sum; print(head); return head;Stu_score *sortbyave(Stu_score *head)int num;char name32;float score;float Chinese;float English;float math;float sum;float ave;Stu_score *tmp = NULL;Stu_score *p = NULL;Stu_score *q = NULL;if(head = NULL) printf(n没有任何学生资料,请先建立链表!n);ret
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学习动力与自我激励小学主题班会课件引领学生航向
- 客户体验与满意度提升作业指导书
- 2026生物医药技术研发应用市场需求评估投资规划分析报告
- 2026中国智能门禁系统市场竞争分析投资策略规划研究报告
- 校园故事征集:展现校园生活小学主题班会课件
- 小学生涯规划与自我管理小学主题班会课件
- 2026欧洲医疗保健行业市场供需情况及未来发展前景评估规划分析报告
- 勤学苦练小学主题班会课件,尊师重教小学主题班会课件
- 信息技术服务项目经理绩效考评表
- 2026中国智能水净化行业市场竞争态势供需分析及投资发展策略规划研究
- 2026年碳排放核算考试题及答案
- 初中七年级英语Starter Unit 1项目课:英文词典使用能力建构与自主学习素养培育教案
- 2026四川宜宾丽雅城市建设发展有限公司下属子公司第二批自主招聘2人笔试备考题库及答案详解
- 2026学年四川省达州市四年级数学期末提升经典测试题(附答案)详细答案和解析
- 2026年监管协管培训试题及答案
- 护理演示:呼吸系统疾病护理
- 老旧小区管网改造施工组织方案
- 阻塞性睡眠呼吸暂停的危害与防治
- 2026年新版电力交易员考试题库
- 电池级氯化锂生产生产线技改及年产4.2万吨电池级锂盐制备原料配套项目可行性研究报告
- 中国临床检验技术操作指南(2026版)
评论
0/150
提交评论