




免费预览已结束,剩余24页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学籍成绩管理系统设计报告一、实验目的: 综合应用所学的C语言程序设计知识,自行设计并实现一个较为完整的小型管理信息系统。通过系统分析、系统设计、编程实现,写实验报告等环节,初步掌握软件系统的设计方法和步骤,提高灵活运用程序语言进行软件开发的技能,提高程序设计水平和分析问题、解决问题的能力。二、实验内容: 1):熟悉C语言的开发环境,按照给定的上机步骤练习完成; 2):熟悉C程序的编辑,编译,链接和运行的过程。3) :编译一个应用系统程序,形成一个软件系统。三、学籍成绩管理系统功能设计要求 : 1. 输入记录:将每一个学生的姓名、学号以及数学、物理、化学、英语、网络课程的成绩作为一个记录。该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。 2. 显示记录:根据用户提供的记录或根据学生姓名显示一个或几个学生的各门功课的成绩和平均成绩。 3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。4查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。5. 删除记录:可删除数据文件中的任一记录。6恢复记录:能恢复被删除的任一记录。7添加记录:可以在数据文件中添加记录并添加记录后对记录内容进行显示。8. 统计: (A)计算各门课程全班平均成绩及总成绩;(B)统计其课程全班得:100分、 9099分、8089分、7079分、6069分、59分以下学生人数及全班总人数的百分比;(C)按字符表格形式打印全部学生的平均成绩(包括各课总的平均成绩)。9保存数据文件功能。10打开数据文件功能。 经过逐层逐块、不断细化、求精过程,编写程序并进行测试、验证,可以逐个模块地分开调试,并通过文件包含或用工程文件的形式进行逐步联合调试。程序运行结果如下表所示(记录个数至少8个)。 学生学籍成绩统计表序号姓名数学物理化学英语网络平均01张望678988897581.602李小明788877947482.203张涛967993849689.604林圆879378988488.005黄佳798574928683.2 单科平均成绩81.4086.8082.0091.483.00三、详细设计及运行结果1、算法设计学籍管理系统程序采用了结构化程序设计的思想,将程序分解成许多模块,再由主函数调用这些模块,实现不同的功能。1、学生信息结构体:储存学生信息。2、主菜单模块:通过利用输出函数显示输出主菜单信息。3、提示错误信息模块:通过利用输出函数输出提示错误信息。4、提示没有找到模块:通过利用输出函数输出提示没有找到该学生。5、输出中文、英文模块:通过利用输出函数输出中文提示及学生数据。6、定位模块:定位连表中符要求合的接点,并返回该指针。7、增加学生信息模块:通过指针的不断后移逐个接受学生信息并将学生信息付给相应变量。8、查询学生信息模块:根据用户选择按学号或按姓名查询,分别按学号或姓名逐个比较输入的数据与结构体中的数据,有匹配的则输出,没有则提示没有找到。9、删除信息模块:根据用户选择按学号或按姓名删除,分别比对输入数据和结构体中的数据,有匹配的则删除,没有则提示无信息可删。10、修改信息模块:通过用户输入的学号找到相应学生,然后逐项修改学生信息,否则提示无此学生。11、显示信息模块:将学生信息输出。12、保存信息模块:将接受的结构体信息利用指针存入文件中。13、排序模块:按照学生的最高分进行排序,输出。14、统计学生信息模块:逐项比较相邻两项的成绩信息,得到每项最大值,并输出统计结果。15、主函数:通过调用各模块来实现学生信息的管理。2、模块图设计总分主函数增加学生信息删除学生信息查询学生信息修改学生信息显示学生信息保存学生信息学生总分排序统计最高分按学号删除按总分排序按学号查询按姓名删除按英语成绩排序按C语言成绩排序按数学成绩排序按平均分排序按姓名查询总分3、流程图设计1、主函数文件是否能打开提示文件已打开,正在导入提示文件不能打开能不能将文件内容放入节点中关闭文件输出菜单,请用户选择Choice1增加学生信息删除学生信息查询学生信息修改学生信息保存学生信息统计最高分按总分排名01234567按最高分打印8返回2、增加学生信息模块:输入信息提示学生已存在是否存在(Y/N)NY给相应变量返回3删除学生信息文件是否为空输出提示:1、按学号2、按姓名否是没有资料choice12提示输入学号提示输入姓名接收输入学号接收输入姓名是否找到是删除该生信息否有提示没有找到返回4.查询学生信息文件是否为空输出提示:1、按学号2、按姓名否是提示无资料可查choice12提示输入学号提示输入姓名接收输入学号接收输入姓名是否找到是输出查询结果否有提示没有找到返回4、修改学生信息文件中是否有资料是否提示输入要修改的学号是否找到否是接收输入的学号写入新数据并给相应变量提示资料已修改完毕提示无资料可修改提示没有找到返回6、显示学生信息文件是否能打开依次显示学生信息是否提示无资料可查返回7、保存学生信息文件是否能打开是否提示文件打开错误将输入内容存入文件提示保存完成返回8.按总分排序资料知否存在提示无资料查否是依次比较总分得出最大值输出比较结果返回9、统计学生最高分资料知否存在提示无资料可统计否是依次比较总分得出最大值依次比较平均分得出最大值依次比较数学成绩得出最大值依次比较英语成绩得出最大值依次比较C语言成绩得出最大值输出比较结果返回 四、调试情况,设计技巧及体会1、本系统在VC6下编译调试通过,可顺利运行,各项功能达到设计要求 本系统采用分模块调试的方法进行编译,即完成一个函数功能模块就编译一个功能模块,最后再进行整体编译并生成可执行文件honest.exe。在调试过程中主要碰到以下问题:(1)输入函数中的取地址符即“&”不能正确使用,导致程序在输入数据时发生错误。(2)在比较两个字符串时不能正确使用“strcmp”函数,导致比较结果不能输出。(3)在应用指针时没有注意头结点中的数据域中是不存放数据,导致指针指向错误。 2、在这次课程设计中我充分体会到C语言作为一门编程的基本语言它的精妙。通过这次课程设计使我了解到我有很多的不足,在程序调试的时候常常会因为几个错误而弄得心烦,这说明我对知识的掌握还不够牢,在程序设计的过程中也暴露出了我的诸多弊端,借这次课程设计的机会我会认真的加以改正,多多看书 多去图书馆学习,同时应该增强自己的实践能力,为以后的学习打下坚实的基础。五、源程序清单(略,详见电子版实验报告)#include#include#include#includestruct student char num20; /*序号*/ char name10; /*姓名*/ float score1; /*数学成绩*/ float score2; /*物理成绩*/ float score3; /*化学成绩*/ float score4; /*英语成绩*/ float score5; /*网络成绩*/ float av1; /*平均成绩*/ int vs; /*判断记录是否存在的变量*/;/*struct result int f; int p; */ struct student student1; struct student total; FILE *fp; char temper20; int index=0; int position=0;/*-*/*-*/ void fscan() float temp1=0,temp2=0,temp3=0,temp4=0,temp5=0,temp6=0; student1.vs=0; fscanf(fp,%s%s%f%f%f%f%f%f%dn,student1.num,,&temp1,&temp2,&temp3,&temp4,&temp5,&temp6,&student1.vs); student1.score1=temp1; student1.score2=temp2; student1.score3=temp3; student1.score4=temp4; student1.score5=temp5; student1.av1=temp6;void fprint() fprintf(fp,%-7s%-7s%-7.2f%-7.2f%-7.2f%-7.2f%-7.2f%-7.2f%-7dn,student1.num,,student1.score1,student1.score2,student1.score3,student1.score4,student1.score5,student1.av1,student1.vs);void scan(int i) /*输入*/ float temp1=0,temp2=0,temp3=0,temp4=0,temp5=0; if(i=1|i=8) printf(请输入学生序号: ); scanf(%s,student1.num); if(i=2|i=8) printf(请输入学生姓名: ); scanf(%s,); if(i=3|i=8) while(1) printf(请输入数学成绩: ); scanf(%f,&temp1); if(temp1=0) student1.score1=temp1; break; else printf(请输入正确数据!n); if(i=4|i=8) while(1) printf(请输入物理成绩: ); scanf(%f,&temp2); if(temp2=0) student1.score2=temp2; break; else printf(请输入正确数据!n); if(i=5|i=8) while(1) printf(请输入化学成绩: ); scanf(%f,&temp3); if(temp3=0) student1.score3=temp3; break; else printf(请输入正确数据!n); if(i=6|i=8) while(1) printf(请输入英语成绩: ); scanf(%f,&temp4); if(temp4=0) student1.score4=temp4; break; else printf(请输入正确数据!n); if(i=7|i=8) while(1) printf(请输入网络成绩: ); scanf(%f,&temp5); if(temp5=0) student1.score5=temp5; /* student1.av1=(temp1+temp2+temp3+temp4+temp5)/5; */ break; else printf(请输入正确数据!n); student1.av1=(student1.score1+student1.score2+student1.score3+student1.score4+student1.score5)/5; student1.vs=1;void print() /*输出*/ printf(|%-7s|%-7s|%-7.2f|%-7.2f|%-7.2f|%-7.2f|%-7.2f|%-7.2f|n,student1.num,,student1.score1,student1.score2,student1.score3,student1.score4,student1.score5,student1.av1); printf(-n); /*表头*/void handline() printf(-n); printf( 序号 姓名 数学 物理 化学 英语 网络 平均n); printf(|-|-|-|-|-|-|-|-|n);void menu() /*菜单*/ cleardevice(); setbkcolor(6); textcolor(WHITE); printf(16-20|5040,40=30(2)9* * * * * * *菜单* * * * * * *); printf(16-130|10035,35=30(7)9a 输入); printf(16-400|10035,35=30(7)9b 显示); printf(16-130|14535,35=30(7)9c 修改); printf(16-400|14535,35=30(7)9d 查找); printf(16-130|20535,35=30(7)9e 删除); printf(16-400|20535,35=30(7)9f 恢复); printf(16-130|25035,35=30(7)9g 添加); printf(16-400|25035,35=30(7)9h 统计); printf(16-130|31535,35=30(7)9i 保存); printf(16-400|31535,35=30(7)9j 打开); printf(16-130|36035,35=30(7)9k 退出); void tothandline()/*-*/ int i=0; fp=fopen(temper,r); while(!feof(fp) fscan(); if(student1.vs!=0)/*判断是否被删除*/ i+; /*-*/ printf(|单科平均成绩 |%-7.2f|%-7.2f|%-7.2f|%-7.2f|%-7.2f|%-7.2f|n,total.score1/i,total.score2/i,total.score3/i,total.score4/i,total.score5/i,total.av1/i); printf(-n);void cleartotal() /*清除统计数据*/ total.score1=0; total.score2=0; total.score3=0; total.score4=0; total.score5=0; total.av1=0;/*-*/*-*/void input();void output();void change();void search();void delete();void nodelete();void addto();void statistics(); /*统计总分*/void addup(); /*统计函数*/void save();void openfile();void quit();void choose() /*选择界面*/ char i=0; for( ; ;) menu(); cleartotal(); setbkcolor(3); printf(16-400|37030,20=11(8)15 请选择a至j); i=getch(); if(i=k) quit(); else switch(i) casea: input();break;/*调用记录输入函数*/ caseb: output();break;/*调用记录显示函数*/ casec: change();break;/*调用记录修改函数*/ cased: search();break;/*调用记录查找函数*/ casee: delete();break;/*调用记录删除函数*/ casef: nodelete();break;/*调用记录恢复函数*/ caseg: addto();break;/*调用记录添加函数*/ caseh: addup();break;/*调用记录统计函数*/ casei: save();break;/*调用数据保存函数*/ casej: openfile();break;/*调用数据文件打开函数*/ void main() int drive=DETECT,mode; registerbgidriver(EGAVGA_driver); initgraph(&drive,&mode, ); cleardevice(); setbkcolor(3); printf(16co4st8e320,170,0,360,300,70,2,4); printf(16-5|2030,30=2(14)9 中南大学); printf(16-55|14055,50=11(13)8 学生学籍成绩管理系统); printf(16-300|30020,20=8(12)3 设计者: 电气信息11xx xxx); printf(16-480|45020,20=8(4)3 请按Enter键进入); getch(); setbkcolor(6); strcpy(temper,temp.txt); choose();/*-*/*-*/void indexup()/*下一页*/ index+;void indexdown()/*上一页*/ if(index=1) index-; else printf(已经是第一页!);void input() /*输入*/ char ch=0; cleardevice();clrscr(); printf(16-400|40032,32=11(8)15 输入功能); printf(nnn 本操作将清空原数据,确定继续?(输入Y或者N)); while(1) scanf(%c,&ch); if(ch=Y|ch=y|ch=n|ch=N) break; else printf(n请输入”Y“或”N“!n); if(ch=Y|ch=y) if(fp=fopen(temper,w)=NULL) printf(无法打开这个文件n); getch(); else addto(); fclose(fp);void output() /*输出*/ int i=0; char ch; cleardevice();clrscr(); cleartotal(); printf(16-400|40032,32=11(8)15 显示全部); if(fp=fopen(temper,r)=NULL) printf(无法打开文件n); else printf(nnn); handline(); while(!feof(fp) fscan(); if(student1.vs!=0)/*判断是否被删除*/ i+;statistics(); if(i=(1+index*7)&i(8+7*index) print(); tothandline(); fclose(fp); printf(1上一页,2下一页,输入其他键退出,现在第%d页,index+1); ch=getch(); if(ch=1) indexdown(); output(); else if(ch=2) indexup(); output(); int find(int a) int r=0; char temp20,temp250; char i; position=0; /* rewind(fp); */ /*复位函数*/ printf(nnn 请选择您需要搜索的关键字:n1序号,2姓名(请输入1到2):); while(1) scanf(%c,&i); if(i=1|i=2) break; else printf(请正确输入1到2:); if(fp=fopen(temper,r+)=NULL) printf(无法打开这个文件n); exit(0); printf(关键字:); scanf(%s,temp2); printf(n查询到的信息n); handline(); while(!feof(fp) position=ftell(fp); fscan(); if(i=1) strcpy(temp,student1.num); else if(i=2) strcpy(temp,); if(a=1&!strcmp(temp,temp2)&student1.vs=1) r=1; print(); break; else if(a=2&!strcmp(temp,temp2)&student1.vs=0) r=1; print(); break; else if(a=3&!strcmp(temp,temp2)&student1.vs=1) r=1; print(); if(r=0) printf(nn查找不到需要的信息); /* position=ftell(fp); */ fclose(fp); return(r);void change() /*修改*/ int i=0,r=0; cleardevice(); clrscr(); printf(16-400|40025,25=11(8)15 更新内容); r=find(1); if(fp=fopen(temper,r+)=NULL) printf(无法打开这个文件n); exit(0); if(r!=0) printf(n输入您希望更新的内容n1 序号, 2 姓名, 3 数学成绩, 4 物理成绩, 5 化学成绩, 6 英语成绩, 7 网络成绩, 8 所有信息, 0 退出?n输入0到8:); scanf(%d,&i); if(i=0) choose(); scan(i); rewind(fp); /*复位函数*/ fseek(fp,position,0);/*转到这一行的起始位置*/ fprint(); handline(); print(); printf(ttt按任意键继续); getch(); fclose(fp);void search() clrscr(); find(3); getch();void delete() /*删除*/ int r=0; char ch; cleardevice(); clrscr(); printf(16-400|40032,32=11(8)15 删除); r=find(1); if(fp=fopen(temper,r+)=NULL) printf(无法打开这个文件n); exit(0); if(r!=0) printf(请确定是否删除!(输入Y或者N)); while(1) scanf(%c,&ch); if(ch!=Y&ch!=y&ch!=n&ch!=N) printf(n请输入Y或N!:); else break; if(ch=Y|ch=y) student1.vs=0; rewind(fp); /*复位函数*/ fseek(fp,position,0);/*转到这一行的起始位置*/ fprint(); printf(删除成功!); else printf(删除取消
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服装知识考试题目及答案
- 液流电池制造项目节能评估报告
- 音乐鉴赏基础试题及答案
- 团务基础试题及答案
- 数字化财务审计的创新方法与技术手段
- 包装物流中心建设项目经济效益和社会效益分析报告
- 羽毛球拍生产线项目风险评估报告
- 风电场项目社会稳定风险评估报告
- 2025年小餐馆员工的劳动合同模板
- 智慧康养中心综合建设项目经济效益和社会效益分析报告
- 穴位按摩法操作评分标准
- 充电站运营管理制度(参考模板)
- 体育与健康教学设计《手倒立前滚翻》
- NISP一级考前模拟训练题库200题(含答案)
- JJG 20-2001标准玻璃量器
- 2024外研版初中英语单词表汇总(七-九年级)中考复习必背
- 《大数据平台部署与运维》课程标准(含课程思政)
- 英语中的时间表达(示范课例)
- 脊柱外科进修汇报
- 《史记》上册注音版
- 苏州大学文学院语言学纲要课程笔记
评论
0/150
提交评论