




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生成绩管理学生成绩管理系统 本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。本程序中涉及结构体、单链表、文件等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用单链表存储结构实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。一、问题定义创建一个学生成绩管理系统。假设系统中每个学生记录只包括班级、学号、姓名、性别、数学成绩、英语成绩、计算机成绩、总分、平均分、名次等信息。程序的运行效果如下图所示,选择任意菜单后,实现相应功能。图1.1 学生成绩管理系统功能需求二、系统设计21 总体设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。学生成绩管理系统输入记录模块查询记录模块更新记录模块统计记录模块输出记录模块从文件读入从键盘输入按学号查询按班级查询按姓名查询删除记录按名次查询排序记录各科最高分、最低分和平均分输出至文件输出至屏幕图2.1 学生成绩管理系统功能模块图本成绩管理系统要求采用单链表实现,如上图2.1所示,它由如下五大功能模块组成:l 输入记录模块。完成将数据存入单链表的工作。记录可以从以二进制形式存储的数据文件中读入,也可从键盘逐个输入学生记录。学生记录由学生的基本信息和成绩信息字段构成。当从数据文件中读入记录时,也就是把在以记录为单位存储的数据文件中,将记录逐条复制到单链表中。l 查询记录模块。完成在单链表中查找满足相关条件的学生记录。在此成绩管理系统中,用户可以按照学生的班级、学号、名次或姓名在单链表中进行查找。若找到该学生的记录,则返回指向该学生的记录的指针。否则返回一个值为NULL的空指针,并打印出未找到该学生记录的提示信息。l 更新记录模块。完成对学生记录的维护。在此成绩管理系统中,它实现了对学生记录的删除和排序操作,并将修改后的数据存入源数据文件。l 统计记录模块。完成对各门功课最高分和不及格人数的统计。l 输出记录模块。一是实现对学生记录的存盘,即将记录写入数据文件中;二是实现将记录信息以表格的形式在屏幕上打印出来。 22 详细设计2.2.1数据结构设计l 学生成绩信息结构体#ifndef H_STUDENT_HH /*如果H_STUDENT_HH没有定义*/#define H_STUDENT_HH /*那就定义 H_STUDENT_HH */#include #include #include #define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/#define numsubs 3 /*学科数目*/typedef struct message_student /*结构体定义*/ char number6; /*学号*/ char number16; /*班级*/char name20; /*学生姓名*/char sex4; /*性别*/float subjectnumsubs; /*科目*/float score; /*总分*/float average; /*平均分*/int index;student;extern int numstus; /*学生数目*/extern student *pointer; /*指向结构体数组*/extern int lens;int menu_select(); /*声明函数*/int dakaiwenjian(student stu); /*打开文件*/int chaxunjilu(student stud); /*查询记录*/int cunchujilu(student stud); /*存储记录*/void huanying(); /*欢迎界面*/void xianshijilu1(); /*显示记录*/void showtable(); /*显示桌面*/void paixu(student stu); /*排序*/void shanchujilu(student stu,int i); /*删除*/void tianjiajilu(student stud); /*添加记录*/void xianshijilu(student stud,int n1,int n2); /*显示记录*/void xiugaijilu(student stud); /*修改记录*/void jishu(student stud); /*为记录计数*/void paixunum(student stud); /*为记录排序*/void paixunum2(student stud); /*为记录排序*/void paixuname(student stud); /*为记录排序*/void paixuname2(student stud); /*为记录排序*/void paixujishu(student stud); /*为记录排序*/void paixujishu2(student stud); /*为记录排序*/void tongjishuju(student stud); /*统计记录*/void xianshijilu1(); /*显示记录*/2.2.2 主控main()函数执行流程判断键值,调用相应函数,完成相应功能开始以可读写的方式打开一个数据文件将此文件的内容读出,并存入一个新的单链表中调用menu_select()菜单函数进入if函数输入08中的一个数值,选择相应操作调用函数writetotext,进行写数据文件操作结束输入是否为0 ?是否已对修改进行了存盘是是否否图2.2 主控函数执行流程图本成绩管理系统根据按键判断。在判断键值时,有效的输入为本0至8之间的任意数值,其他输入都被视为错误按键。若输入为0(即变量select=0),它会继续判断,如果对记录进行过更新操作,那么是否已经保存过新的数据,若没有,则全局变量saveflage=1,系统会提示用户是否需要进行数据存盘操作,用户输入y或n,系统会自动进行存盘操作后再执行退出成绩管理系统的操作。若选择1,则调用tianjiajilu函数,执行增加学生记录操作;若选择2,则调用chaxunjilu函数,执行查询学生记录操作;若选择3,则首先调用chaxunjilu函数,执行查询学生记录操作,查找出学生纪录后再调用shanchujilu函数,执行删除学生记录操作;若选择4,则调用sort函数,执行按降序排序学生记录操作;若选择5,则调用tongjishuju函数,执行统计学生记录操作;若选择6,则调用dakaiwenjian函数,打开一个已储存的文件;若选择8,则调用cunchujilu函数,执行将学生记录存入数据文件的操作;若选择0,break,退出系统;若输入为09之外的值,default,给出按键错误的提示输入错误,请输入数字08:。2.2.3 函数功能描述l 函数名: strcmp 功 能: 串比较 用 法: int strcmp(char *str1, char *str2); 程序例: #include #include int main(void) char *buf1 = aaa, *buf2 = bbb, *buf3 = ccc; int ptr; ptr = strcmp(buf2, buf1); if (ptr 0) printf(buffer 2 is greater than buffer 1n); else printf(buffer 2 is less than buffer 1n); ptr = strcmp(buf2, buf3); if (ptr 0) printf(buffer 2 is greater than buffer 3n); else printf(buffer 2 is less than buffer 3n); return 0; l 函数名: getchar 功 能: 从stdin流中读字符 用 法: int getchar(void); 程序例: #include int main(void) int c; /* Note that getchar reads from stdin and is line buffered; this means it will not return until you press ENTER. */ while (c = getchar() != n) printf(%c, c); return 0; l 函数名: gets 功 能: 从流中取一字符串 用 法: char *gets(char *string); 程序例: #include int main(void) char string80; printf(Input a string:); gets(string); printf(The string input was: %sn, string); return 0; l 函数名: fopen 功 能: 打开一个流 用 法: FILE *fopen(char *filename, char *type); 程序例: #include #include #include int main(void) char *s; char driveMAXDRIVE; char dirMAXDIR; char fileMAXFILE; char extMAXEXT; int flags; s=getenv(COMSPEC); /* get the comspec environment parameter */ flags=fnsplit(s,drive,dir,file,ext); printf(Command processor info:n); if(flags & DRIVE) printf(tdrive: %sn,drive); if(flags & DIRECTORY) printf(tdirectory: %sn,dir); if(flags & FILENAME) printf(tfile: %sn,file); if(flags & EXTENSION) printf(textension: %sn,ext); return 0; l 函数名: fscanf 功 能: 从一个流中执行格式化输入 用 法: int fscanf(FILE *stream, char *format,argument.); 程序例: #include #include int main(void) int i; printf(Input an integer: ); /* read an integer from the standard input stream */ if (fscanf(stdin, %d, &i) printf(The integer read was: %in, i); else fprintf(stderr, Error reading an integer from stdin.n); exit(1); return 0; l 函数名: fgetc 功 能: 从流中读取字符 用 法: int fgetc(FILE *stream); 程序例: #include #include #include int main(void) FILE *stream; char string = This is a test; char ch; /* open a file for update */ stream = fopen(DUMMY.FIL, w+); /* write a string into the file */ fwrite(string, strlen(string), 1, stream); /* seek to the beginning of the file */ fseek(stream, 0, SEEK_SET); do /* read a char from the file */ ch = fgetc(stream); /* display the character */ putch(ch); while (ch != EOF); fclose(stream); return 0; l 函数名: fprintf 功 能: 传送格式化输出到一个流中 用 法: int fprintf(FILE *stream, char *format, argument,.); 程序例: /* Program to create backup of the AUTOEXEC.BAT file */ #include int main(void) FILE *in, *out; if (in = fopen(AUTOEXEC.BAT, rt) = NULL) fprintf(stderr, Cannot open input file.n); return 1; if (out = fopen(AUTOEXEC.BAK, wt) = NULL) fprintf(stderr, Cannot open output file.n); return 1; while (!feof(in) fputc(fgetc(in), out); fclose(in); fclose(out); return 0; l 函数名: strcpy 功 能: 串拷贝 用 法: char *strcpy(char *str1, char *str2); 程序例: #include #include int main(void) char string10; char *str1 = abcdefghi; strcpy(string, str1); printf(%sn, string); return 0; 三、总结为期三周的高级语言程序设计结束了。这学期后期,我们被通知要进行三周的课程设计。当时有点懵,感觉学的东西很少,很零散,不知该怎么联到一起,就要课程设计,是不是太难为我们了。 第一天基本上都是在看书,把基本知识再熟悉一边。老师发过来20道设计题目题,但我们几乎不知道怎样完成这些任务,不过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工地现场文明施工实施方案
- 九江市八里湖新区第二小学2025年顶岗教师招聘备考练习试题及答案解析
- 小学学生活动中心建设方案
- 2025河北体育学院选聘第一批工作人员5人备考练习试题及答案解析
- 2025江西南昌市樟树市赣港港口经营有限公司招聘劳务派遣制员工14人备考练习试题及答案解析
- 编程基础算法题库及答案
- 2025年河北沧州海兴县职教中心临聘教师若干名备考练习试题及答案解析
- 艺术作品使用许可合同
- 设备仪器用品购销合同协议
- 超市连锁店装修工程合同协议
- 小学数学教师业务水平考试试题
- 安全文明施工措施费支付申请表实用文档
- 北师版八年级数学上课程纲要
- 华晨宝马大东厂区天然气分布式能源站项目环评报告
- 汽车电控发动机构造与维修(第三版)
- GB/T 328.13-2007建筑防水卷材试验方法第13部分:高分子防水卷材尺寸稳定性
- 茶叶实践报告3篇
- 西门子低压电器快速选型手册
- 最新教科版五年级科学上册《第2课时 地球的结构》教学课件
- Q∕SY 05129-2017 输油气站消防设施及灭火器材配置管理规范
- 企业微信私域流量运营方案
评论
0/150
提交评论