1、C语言程序课程设计报告郭晗课程设计(论文)题 目 名 称 学生成绩管理系统 课 程 名 称 C语言程序课程设计 学 生 姓 名 郭晗 学 号 1141303066 系 、专 业 信息工程系、通信工程 指 导 教 师 黄同成 2012年6月3号目 录1 前言 22 需求分析 22.1要求 22.2任务 22.3运行环境 22.4开发工具 23 概要设计与详细设计 23.1系统流程图 23.2查询函数流程图 34 编码与实现 44.1分析 54.2具体代码实现 54.3 运行结果截图 211)主菜单 212)成绩录入 213)按学号排序 214)按成绩排序 215)成绩查询 225 课程设计总结
2、23参考文献 23致 谢 231 前言编写一个程序来处理学生成绩。通过一个结构体数组来存放输入的每一位同学的成绩(包括学期、学号、班级、姓名、四门课成绩),然后将其信息存入文件中。并且能够完成队学生成绩的录入、修改、查询,按班级输出学生成绩单及不及格学生名单,统计学生成绩求学生的总分及平均分。2 需求分析2.1要求(1)用C语言实现程序设计;(2)利用结构体进行相关信息处理;(3)画出查询模块的流程图;(4)系统的各个功能模块要求用函数的形式实现;(5)界面友好(良好的人机互交),程序要有注释。2.2任务(1)定义一个结构体类型数组,输入每一位同学的记录(包括学期、学号、班级、姓名、四门课成绩
3、),将其信息存入文件中;(2)按顺序输入每个学生的信息;(3)画出所有模块的流程图;(4)编写代码;(5)程序分析与调试。2.3运行环境(1)WINDOWS2000/XP系统(2)TurboC2.0编译环境2.4开发工具C语言3 概要设计与详细设计3.1系统流程图 图3.1 系统流程图3.2查询函数流程图首先输入学号,当没有记录是显示“没有任何学生”,返回函数重新开始。如过输入学号合格,则对已经存在的记录进行查找,最后打印信息。函数流程图如下所示:图3-2 search()函数流程图4 编码与实现4.1分析1)本程序需要定义多个结构体,用于存放学生的相关信息。struct student/定义
4、结构体2) 主函数功能比较简单,用while循环语句和switch多重选择语句来显示主界面和调用函数。在主函数的前面要写必须的头文件,预定义语句以及全局变量的结构体。3) 利用while循环结构和else/if语句来实现增加信息的功能。先定义5个指针*p0,*p1,*p2,*p3,*max,开始运行,当学生学号小于0时返回add函数,重新开始,而当输入0时返回菜单函数。当输入学号符合要求时,函数向下运行,令p3=head,用else/if语句判断输入的学号是否重复,如果是则重新输入,如果不是,函数继续向下运行。接下来利用指针来储存依次输入的语文、英语、数学、计算机成绩。而用while 结构来保
5、证输入的成绩在0100之间,如果不是则重新输入。4)在C语言中无法做到删除和移动数据,所以删除记录要先将所有记录从文件中读出,删除后再将记录写回文件中。每读出一条记录,按其在文件中的顺序做好指针链接关系,然后查处要删除的学生信息,将其在链表中删除,最后再将变动的记录重新写回文件中。用指针,while循环和else/if结构来实现查找出要删除的学生。5) 在插入函数中利用指针,和else/if语句来实现输入的数据按照插入相应的位置。6) 利用指针、链表打开已经储存的信息。7) 先用if判断是否存在信息,如果没有则返回,如果已经存在则继续运行函数。利用while循环语句和switch多重选择语句来
6、实现是按照哪一种方式排名,用for,if语句来实现排名。8) 用do/while循环语句和switch多重选择语句调用各个功能函数。9)用while循环语句和switch多重选择语句输出记录中的个人总分和平均分、单科平均分、总分最高分、总分最低分。4.2具体代码实现#includestdio.h#includestdlib.h#includestring.htypedef struct int num; /学号 char name20; /姓名 char sex10; int age; double maths; /数学成绩 double english; /英语成绩 double chine
7、se; /语文成绩 double computer; /计算机成绩 double total; /总成绩 double average; /平均成绩 STUDENT; /定义结构体#define N 100int menu()char a;do system(cls); /运行前清零 printf(tt 学生成绩管理系统n); printf(tt | 1. 输入记录 n); printf(tt | 2. 插入 n); printf(tt | 3. 按学号排序 n); printf(tt | 4. 按成绩排序 n); printf(tt | 5. 查询信息 n); printf(tt | 6.
8、删除某人信息 n); printf(tt | 7. 浏览结果 n); printf(tt | 0. 退出 n); printf(tt*n); printf(ttt给出你的选择(0-7):); a=getchar();while(a7);return(a-0);void input(STUDENT *s, int size) /输入函数 int i; FILE*fp; if(fp=fopen(stu.dat,wb)=NULL) printf(Cannot open file!); exit(0); for(i=0;isize;i+) printf(输入学号:n); scanf(%d,&si.nu
9、m); printf(输入姓名:n); scanf(%s,si.name); printf(输入性别:n); scanf(%s,si.sex); printf(输入年龄:n); scanf(%d,&si.age); printf(输入数学成绩:n); scanf(%lf,&si.maths); printf(输入英语成绩:n); scanf(%lf,&si.english); printf(输入语文成绩:n); scanf(%lf,&si.chinese); printf(输入计算机成绩:n); scanf(%lf,&puter); si.total=si.maths+si.chinese+s
10、i.english+puter; si.average=si.total/4.0; fwrite(&si,sizeof(STUDENT),1,fp); fclose(fp);void output(STUDENT *s) /输出函数 int i; FILE*fp; if(fp=fopen(stu.dat,rb)=NULL) printf(Cannot open file!); exit(0); printf(学号 姓名 性别 年龄 数学 英语 语文 计算机 总分 平均n); for(i=0;fread(&si,sizeof(STUDENT),1,fp)=1;i+) printf( %-7d,s
11、i.num); printf(%-6s,si.name); printf(%-6s,si.sex); printf(%-4d,si.age); printf(%7.1f ,si.maths); printf(%7.1f ,si.english); printf(%7.1f ,si.chinese); printf(%7.1f ,puter); printf(%7.1f ,si.total); printf(%7.1fn,si.average); void save() /*保存到磁盘上*/ FILE *fp; STUDENT*s; fp=fopen(stu.dat,wb); int i; fo
12、r (i=0;iN;i+) fwrite(&si,sizeof(STUDENT),1,fp); fclose(fp);void read(STUDENT *s,int size) /*从磁盘内读取*/ FILE *fp; fp=fopen(stu.dat,rb); int i; for (i=0;iN;i+) fread(&si,sizeof(STUDENT),1,fp); fclose(fp); void find(STUDENT *s,int size) /按姓名查找 int i,flag=0; char c20; FILE *fp; fp=fopen(stu.dat,rb); print
13、f(输入要查询学生的姓名为:n); scanf(%s,c); printf(学号 姓名 性别 年龄 数学 英语 语文 计算机 总分 平均n); for (i=0;fread(&si,sizeof(STUDENT),1,fp)=1;i+) if(strcmp(si.name,c)=0) printf( %-7d,si.num); printf(%-6s,si.name); printf(%-6s,si.sex); printf(%-4d,si.age); printf(%7.1f ,si.maths); printf(%7.1f ,si.english); printf(%7.1f ,si.ch
14、inese); printf(%7.1f ,puter); printf(%7.1f ,si.total); printf(%7.1fn,si.average);flag=1; if(flag=0)printf(输入有误!); fclose(fp); void sort_by_num(STUDENT *s,int size) /按学号排序int i,j,n=0; STUDENT t; FILE *fp; fp=fopen(stu.dat,rb); for (i=0;fread(&si,sizeof(STUDENT),1,fp)=1;i+) n+; for(i=0;in-1;i+) for (j
15、=i+1;jsj.num) t=si; si=sj; sj=t; printf(学号 姓名 性别 年龄 数学 英语 语文 计算机 总分 平均n); for(i=0;in;i+) printf( %-7d,si.num); printf(%-6s,si.name); printf(%-6s,si.sex); printf(%-4d,si.age); printf(%7.1f ,si.maths); printf(%7.1f ,si.english); printf(%7.1f ,si.chinese); printf(%7.1f ,puter); printf(%7.1f ,si.total);
16、 printf(%7.1fn,si.average); fp=fopen(stu.dat,wb); for(i=0;in;i+) fwrite(&si,sizeof(STUDENT),1,fp); fclose(fp);void sort_by_total(STUDENT *s,int size) /按总分排序函数int i,j,n=0; STUDENT t; FILE *fp; fp=fopen(stu.dat,rb); for (i=0;fread(&si,sizeof(STUDENT),1,fp)=1;i+) n+; for(i=0;in-1;i+) for (j=i+1;jn;j+)
17、if (si.totalsj.total) t=si; si=sj; sj=t; printf(学号 姓名 性别 年龄 数学 英语 语文 计算机 总分 平均n); for(i=0;in;i+) printf( %-7d,si.num); printf(%-6s,si.name); printf(%-6s,si.sex); printf(%-4d,si.age); printf(%7.1f ,si.maths); printf(%7.1f ,si.english); printf(%7.1f ,si.chinese); printf(%7.1f ,puter); printf(%7.1f ,si
18、.total); printf(%7.1fn,si.average); fp=fopen(stu.dat,wb); for(i=0;in;i+) fwrite(&si,sizeof(STUDENT),1,fp); fclose(fp);void del(STUDENT *s,int size) /按学号删除函数 int i,n; int num; int flag=0; int total=0,m=0; FILE *fp; fp=fopen(stu.dat,rb); printf(请输入要删除的学生学号:n); scanf(%d,&num); for (i=0;fread(&si,sizeof
19、(STUDENT),1,fp)=1;i+) total+; for(i=0;itotal;i+) if(num=si.num)flag=1; printf(tt要删除学生的信息); printf(学号 姓名 性别 年龄 数学 英语 语文 计算机 总分 平均n); printf( %-7d,si.num); printf(%-6s,si.name); printf(%-6s,si.sex); printf(%-4d,si.age); printf(%7.1f ,si.maths); printf(%7.1f ,si.english); printf(%7.1f ,si.chinese); pri
20、ntf(%7.1f ,puter); printf(%7.1f ,si.total); printf(%7.1fn,si.average); for(i=i;itotal;i+) si=si+1; if(fp=fopen(stu.dat,wb)=NULL) printf(Cannot open file!); exit(0); for(i=0;itotal-1;i+) fwrite(&si,sizeof(STUDENT),1,fp); fclose(fp); printf(tt删除后的情况n); printf(学号 姓名 数学 英语 语文 计算机 总分 平均n); fp=fopen(stu.d
21、at,rb); for (i=0;fread(&si,sizeof(STUDENT),1,fp)=1;i+) m+; for(i=0;im;i+) printf(%-12d,si.num); printf(%-11s,si.name); printf(%7.1f ,si.maths); printf(%7.1f ,si.english); printf(%7.1f ,si.chinese); printf(%7.1f ,puter); printf(%7.1f ,si.total); printf(%7.1fn,si.average); if(flag=0) printf(*); printf
22、(输入错误!n); printf(请返回!n); printf(*); printf(nnn); fclose(fp);void insert(STUDENT *s,int size) /按学号插入 int i,n=0; int total=0; FILE *fp; fp=fopen(stu.dat,ab); rewind(fp); for(i=0;fread(&si,sizeof(STUDENT),1,fp)=1;i+) printf(学号 姓名 性别 年龄 数学 英语 语文 计算机 总分 平均n); printf( %-7d%-6s%-6s%-4s%7.1f%7.1f%7.1f%7.1f%
23、7.1f%7.1fn,si.num,si.sex,si.age,si.maths,si.english,si.chinese,puter,si.total,si.average); total=i; printf(请输入要插入学生的学号: n); scanf(%d,&ssize.num); printf(输入姓名:n); scanf(%s,ssize.name); printf(输入性别:n); scanf(%s,ssize.sex); printf(输入年龄:n); scanf(%d,&ssize.age); printf(输入数学成绩:n); scanf(%lf,&ssize.maths)
24、; printf(输入英语成绩:n); scanf(%lf,&ssize.english); printf(输入语文成绩:n); scanf(%lf,&ssize.chinese); printf(输入计算机成绩:n); scanf(%lf,&puter); ssize.total=ssize.maths+ssize.chinese+ssize.english+puter; ssize.average=ssize.total/4.0; fwrite(&ssize,sizeof(STUDENT),1,fp); fclose(fp); /while(!feof(fp) / if(fread(&sn
25、,sizeof(STUDENT),1,fp) / n+; /* printf(学号 姓名 性别 年龄 数学 英语 语文 计算机 总分 平均n); for(i=0;isize+1;i+) printf( %-7d,si.num); printf(%-6s,si.name); printf(%-6s,si.sex); printf(%-4d,si.age); printf(%7.1f ,si.maths); printf(%7.1f ,si.english); printf(%7.1f ,si.chinese); printf(%7.1f ,puter); printf(%7.1f ,si.total); printf(%7.1fn,si.average); */ void main() /主函数 STUDENT stdN; /定义结构体数组 int m; while(1) /循环保证多次应用 switch(menu() /运用菜单函数 case 1: printf(请输入你要登记的人数:n); scanf(%d,&m); input(std,m);system(pause);break; case 2:insert(std,N);syste
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1