c语言选择查找成绩和学号,C语言成绩查询系统

C语言成绩查询系统

C语言成绩查询系统C 语言大作业姓名:班级:学号:指 导 教 师:设 计 时 间:2目录一 .目的4二 .题目描述和要求4三 .报告内容63.1 需求分析63.2 概要设计63.3 详细设计83.4 主要源程序代码93.5 测试分析253.6 设计结果26四 .结论与心得313一 .目的1.1 、通过本次大作业,锻炼我们应用C语言的语法规则和已经掌握的算法,自己解决一个较简单的课题,初步积累编程经验。1.2 、 通过学习掌握程序设计的方法与编程技术,学会良好的程序设计风格,为计算机在不同领域的应用打下坚实的基础。1.3 、 要求我们能利用计算机解决实际问题。从分析问题入手,设计可行的算法,进而编出相应的C 程序。强调上机实践过程,从实际应用出发,注重程序的实际应用。二 .题目描述和要求题目:学生成绩管理系统4应用链表及外部文件,独立设计上述应用系统,并编程实现以下功能:2.1信息录入录入学生信息(包括姓名、学号、各科成绩) 。2.2信息查询输入学号,查询与学号相对应的信息(包括成绩) ,并按可选的自定义规则进行排序。按班级查询学生成绩。按班级统计学科总分、平均分等。2.3信息删除与修改输入学号,删除该学号对应的成绩信息。输入学号,查询并显示出该学号信息,并在此基础上进行修改。2.4计算学生成绩计算每位学生的总分。计算每位学生的平均分。成绩排序。2.5 信息保存将学生信息保存在文件中。2.6根据以上功能需求,定义通讯录信息结构,并采用链表结构对数据进行存储。52.7 提供友好的用户界面,方便用户操作。三 .报告内容3.1 需求分析随着当今社会发展, 信息化水平逐步提高, 对教务管理有了新的要求,因此,编写一个信息管理系统是十分有必要的。该软件主要是实现对学生信息进行系统化的管理,首先可以对学生基本信息进行输入和读取,其次查找并显示特定学生的相关信息,然后可以插入学生的相关信息,还有就是可按学生相关信息排序,以求达到简易操作的目的。3.2 概要设计1系统结构图(功能模块图)和数据变量说明6主菜单输列查增修排保退2. 系统总体流程图开始编译有有 /无MAIN调用K=0K连接EXI调用各个功能函数( K=?)7执行错输入3.3 详细设计源文件函数名或其他成分功能student.cpp函数名或其他成分功能main总控函数int choice菜单选择switch(choice)菜单处理IO_WriteInfo新建学生信息记录exit结束运行Student_Insert增加学生信息Student_Display显示信息Student_Delete删除指定的记录Student_Select查询指定学生的信息Student_Modify修改指定学生的信息Student_SortByAverage排序8student.h结构声明学生成绩结构库函数及函数原型声明引用库函数及函数3.4 主要源程序代码#includestdio.h#includestring.h#include cstdlibstruct Studentchar ID20;char Name20;float scor_eng;float scor_math;float scor_phy;float Average;struct Student students1000;int num=0;9float Avg(struct Student stu)return(stu.scor_eng+stu.scor_math+stu.scor_phy)/3;int Student_SearchByIndex(char id)int i;for (i=0;inum;i+)if (strcmp(studentsi.ID,id)=0)return i;return -1;int Student_SearchByName(char name)int i;for (i=0;inum;i+)10if(strcmp(studentsi.Name,name)=0)return i;return -1;void Student_DisplaySingle(int index)printf(%10s%10s%8s%8s%8s%10sn, 学号 , 姓名 , 英语成绩 , 数学成绩 , 物理成绩 , 平均成绩 );printf(-n);printf(%10s%10s%8.2f%8.2f%8.2f%10.2fn,s tudentsindex.ID,studentsindex.Name,studentsindex.scor_eng,studentsindex.scor_m ath,studentsindex.scor_phy,studentsindex.Ave11rage);void Student_Insert()while(1)printf( 请输入学号 :);scanf(%s,&studentsnum.ID);getchar();printf( 请输入姓名 :);scanf(%s,&studentsnum.Name);getchar();printf( 请输入英语成绩 :);scanf(%f,&studentsnum.scor_eng);getchar();printf( 请输入数学成绩 :);scanf(%f,&studentsnum.scor_math);getchar();printf( 请输入物理成绩 :);12scanf(%f,&studentsnum.scor_phy); getchar();studentsnum.Average=Avg(studentsnum);num+;printf( 是否继续 ?(y/n);if (getchar()=n)break;void Student_Modify()while(1)char id20;int index;printf(请 输 入 要 修 改 的 学 生 的 学号 :);scanf(%s,&id);getchar();13index=Student_SearchByIndex(id);if (index=-1)printf( 学生不存在 !n);elseprintf(你 要 修 改 的 学生 信 息为 :n);Student_DisplaySingle(index);printf(-请输入新值 -n);printf( 请输入学号 :);scanf(%s,&studentsindex.ID);getchar();printf( 请输入姓名 :);scanf(%s,&studentsindex.Name);getchar();printf( 请输入英语成绩 :);scanf(%f,&studentsindex.scor_eng);14getchar();printf( 请输入数学成绩 :);scanf(%f,&studentsindex.scor_math);getchar();printf( 请输入物理成绩 :);scanf(%f,&studentsindex.scor_phy); getchar();studentsindex.Average=Avg(studentsindex);printf( 是否继续 ?(y/n);if (getchar()=n)break;void Student_Delete()15int i;while(1)char id20;int index;printf(请 输 入 要 删 除 的 学 生 的 学号 :);scanf(%s,&id);getchar();index=Student_SearchByIndex(id);if (index=-1)printf( 学生不存在 !n);elseprintf(你 要 删 除 的 学生 信 息为 :n);Student_DisplaySingle(index); printf( 是 否 真 的 要 删除 ?(y/n);16if (getchar()=y)for (i=index;inum-1;i+)studentsi=studentsi+1;num-;getchar();printf( 是否继续 ?(y/n);if (getchar()=n)break;void Student_Select()while(1)17char name20;int index;printf(请 输入 要查 询的 学生 的姓名 :);scanf(%s,&name);getchar();index=Student_SearchByName(name); if (index=-1)printf( 学生不存在 !n);elseprintf(你 要 查 询 的 学生 信 息为 :n);Student_DisplaySingle(index);printf( 是否继续 ?(y/n);if (getchar()=n)break;18void Student_SortByAverage()int i,j;struct Student tmp;for (i=0;inum;i+)for (j=1;jnum-i;j+)if(studentsj-1.Averagestudentsj.Average)tmp=studentsj-1;studentsj-1=studentsj;studentsj=tmp;19void Student_Display()int i;printf(%10s%10s%8s%8s%8s%10sn,学号 , 姓名 , 英语成绩 , 数学成绩 , 物理成绩 , 平均成绩 );printf(-n);for (i=0;inum;i+)printf(%10s%10s%8.2f%8.2f%8.2f%10.2fn,s tudentsi.ID,studentsi.Name,studentsi.scor_eng,studentsi.scor_math,studen tsi.scor_phy,studentsi.Average);void IO_ReadInfo()20FILE *fp;int i;if(fp=fopen(Database.txt,rb)=NULL)printf( 不能打开文件 !n);return;if (fread(&num,sizeof(int),1,fp)!=1)num=-1;elsefor(i=0;inum;i+)fread(&studentsi,sizeof(structStudent),1,fp);fclose(fp);21void IO_WriteInfo()FILE *fp;int i;if(fp=fopen(Database.txt,wb)=NULL)printf( 不能打开文件 !n);return;if (fwrite(&num,sizeof(int),1,fp)!=1)printf( 写入文件错误 !n);for (i=0;inum;i+)if (fwrite(&studentsi,sizeof(struct Student),1,fp)!=1)printf( 写入文件错误 !n);22fclose(fp);int main()int choice;IO_ReadInfo();while(1)printf(n-学 生 成 绩 管 理 系 统-n);printf(1. 增加学生记录 n); printf(2. 修改学生记录 n); printf(3. 删除学生记录 n); printf(4. 按姓名查询学生记录 n); printf(5. 按平均成绩排序 n);printf(6.保存文件 n);printf(7.退出 n);printf( 请选择 (1-7):);scanf(%d,&choice);23getchar();switch(choice)case 1:Student_Insert();break;case 2:Student_Modify();break;case 3:Student_Delete();break;case 4:Student_Select();break;case 5:Student_SortByAverage();Student_Display();break;case 6:IO_WriteInfo();break;24case 7:exit(0);break;3.5 测试分析C 语言是上学期的学习内容,现在生疏了很多,以致程序运行过程中有许多bug,测试也有很多想不到的错误。下面列举几个例子:1)IO_ReadInfo 读出文件If (fp=fopen( “database.txt ”,”rb ”))=NULL )以二进制的格式读取文件的模式打开 database.txt 文件,并把文件指针赋值为文件读取指针IO_WriteInfo 写入文件If (fp=fopen( “database.txt ”,”rb ”))=NULL )以二进制写入方式打开文件,和读取 类 似 。 在写 这个 函数 的 时候 总是 不能 读出 , 而 且 写 入 也有 问 题 , if (fwrite(&num,sizeof(int),1,fp)!=1) 因为 sizeof( int )是指一次读入的二进制数据单位个数,后面的“ 1”表示要读取的次数, fread 返回值有 1、0,分别是成功,失败的意思。2)在程序中 float 与 int 要根据数据得取值情况,还有字符串类型的使用,在求学生成绩平均值的时候,因为字符串类型不一致,导致数据结果失真,这样的错误不应再犯。253.6 设计结果录入一条或多条学生数据删除一条或多条学生数据26按姓名查找一条或多条学生数据27增加一条或多条学生数据修改一条或多条学生数据28按学生平均成绩排序保存文件到根目录29退出程序30四 .结论与心得通过一周的上机实习,我对C 语言又有了自己的一点认识。C语言的学习是一个系统的过程,不像其它学科知识, C 语言必须自己亲自一个个代码打出来,自己对那个代码要有自己的了解,怎么用,如何用更好,还可以怎么用,都要通过自己联系才有体会,在实践中成长,在实践中求知。这次设计的课题是学生信息管理系统。课题要求对学生信息实现一系列基本操作。我选择通过结构体数组和指针来实现这个设计。但是,设计完成后关于用学号输出成绩还是用姓名都是可以的。但用学号输入时有很多麻烦都是之前没有料到的,换成姓名输入后,就简单多了。总之,通过这次实习,我也认识到了我自己在程序设计这门课程上的不足,在以后的学习实践中,要更加的严谨踏实,对知识的把握要更加的细致入微,要活学活用,争取在这个学科上取得更大的进步。3132

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值