收藏 分享(赏)

c语言大作业-基于数组的学生信息管理系统.doc

上传人:精品资料 文档编号:8849098 上传时间:2019-07-14 格式:DOC 页数:22 大小:65.38KB
下载 相关 举报
c语言大作业-基于数组的学生信息管理系统.doc_第1页
第1页 / 共22页
c语言大作业-基于数组的学生信息管理系统.doc_第2页
第2页 / 共22页
c语言大作业-基于数组的学生信息管理系统.doc_第3页
第3页 / 共22页
c语言大作业-基于数组的学生信息管理系统.doc_第4页
第4页 / 共22页
c语言大作业-基于数组的学生信息管理系统.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、C 语言程序设计实训 1报告设 计 题 目: 基于数组的学生信息管理系统 学 院 名 称: 科学技术学院 专 业: 软件工程 班 级: 108 班 姓 名: 大神 学 号 594188 提 交 日 期: 2014 年 6 月 一、实验内容编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3 门成绩。N 定义为符号常量(学生数) 。全局类型的定义如下:二、实验要求 (1) main 函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。STU studentN; /保存输入的 N 名学生信息(2) 定义函数 Input:从键

2、盘输入 N 个学生的信息。(3) 定义函数 Save:将学生信息存入文件。(4) 定义函数 Output:将某个学生信息表格化屏幕输出。(5) 定义函数 Fetch:从文件中随机读取第 n 个(0#include#include #define N 10/学生的总人数#define pri(p) printf(“n%dt%st%8st%dt%dt%dt%dn“,p-num,p-name,p-major,p-classNo,p-score0,p-score1,p-score2)struct Studentint num;/学号char name15;/姓名char major10;/专业(com

3、puter,software,network)int classNo;/班级(1-2)int score3;/3 门课的成绩(0-2);typedef struct Student STU;/函数声明部分void Input(STU *p);void Output(STU *p);void Save(STU *p);int Fetch(STU *st,int n,char *filename);void Max(STU stu,int m);double average_person(STU *p);void sort_select(STU *p);void Sort_Buble(STU *p

4、);void Sort_insert(STU *p);void Ask();void Search(STU *p);void Load(STU *p);/主函数开始 void main()int choose;/功能编号int i,j,m,n;/控制循环的数字以及控制函数的数字char filename10;/文件名称STU stuN;/定义长度为 N 的 STU 型的数组STU *p;/定义 STU 型的指针p=stu;/让其指向 stu 的数组,方便以后用指针 p 对数组 stu 直接操作while(1)printf(“tt*欢迎使用学生信息管理系统 *n“);printf(“tt*n“)

5、;printf(“t1-输入学生信息 ;n“);printf(“t2-学生信息存盘 ;n“);printf(“t3-将某个学生信息表格化输出 ;n“);printf(“t4-从文件中随机读取第 n 个学生的信息;n“);printf(“t5-求所有学生某门课程的最高分和分数最高的学生的姓名;n“);printf(“t6-对所有的学生,按总平均成绩由低到高进行简单选择排序;n“);printf(“t7-对某个班级的学生,按总平均成绩由高到低进行起泡排序;n“);printf(“t8-对某个专业的学生,按某门课程成绩由低到高进行直接插入排序;n“);printf(“t9-班级和成绩的综合查找 ;n

6、“);printf(“t10-读取文件中的全部信息 ;n“);printf(“t 其他-退出。n“);printf(“请输入您想选择的功能编号:“);scanf(“%d“,switch(choose)case 1:for(i=0;i=0 /break while / 函数部分 void Input(STU *p)int j;printf(“请输入学生的学号,按 Enter 键结束:n“);scanf(“%d“,getchar();printf(“请输入学生的姓名字符串,按 Enter 键结束: n“);gets(p-name);printf(“请输入学生的专业字符串(computer,soft

7、ware,network) ,按 Enter 键结束:n“);gets(p-major);printf(“请输入学生的班级号(1-2),按 Enter 键结束:n“);scanf(“%d“,getchar();printf(“请输入学生的成绩(0-100):n“);for(j=0;jscorej);getchar();void Output(STU *p)printf(“学号t 姓名t 专业tt 班级 t 成绩 0t 成绩 1t 成绩 2n“);pri(p);double average_person(STU *p)return (p-score0)+(p-score1)+(p-score2)

8、/3.0);void Save(STU *p)FILE *fp;char filename20;int i;printf(“请输入要保存的文件名称:n“);gets(filename);if(fp=fopen(filename,“wb“)=NULL)printf(“新建文件失败,请重试:n“);return;for(i=0;iscore0score0)/让最高分的同学放到第一名的位置上来。index=y0;y0=yi;yi=index;p=p+y0;printf(“t 第 0 门最高分为:“);printf(“%dn“,p-score0);printf(“t 得最高分的同学名字是:“);put

9、s(p-name);break;case 1:for(i=1;iscore1score1)index=y0;y0=yi;yi=index;p=p+y0;printf(“t 第 1 门最高分为:“);printf(“%dn“,p-score1);printf(“t 得最高分的同学名字是:“);puts(p-name);break;case 2:for(i=1;iscore2score2)index=y0;y0=yi;yi=index;p=p+y0;printf(“t 第 2 门最高分为:“);printf(“%dn“,p-score2);printf(“t 得最高分的同学名字是:“);puts(

10、p-name);break;default:break;/对所有学生,按总平均成绩由低到高进行简单选择排序。void sort_select(STU *p)int i,j,k;double t,averN;STU a;for(i=0;iscore1+(p+i)-score2)/3.0;for(i=0;iaverj)k=j; /记下位置,继续让大的数和下一位进行比较。t=averi;averi=averk;averk=t;/交换,把大的数向后移一位;如果 if 为假,k=i ,相当于没交换。a=*(p+i);*(p+i)=*(p+k);*(p+k)=a;/利用结构体指针变量交换结构体for(i=

11、0;imajor,(p+i)-classNo,(p+i)-name,averi);/对某个班级的学生,按总平均成绩由高到低进行起泡排序。void Sort_Buble(STU *p)int i,j,b;double t,averN;STU a;printf(“选择一个班级:n“);scanf(“%d“,for(i=0;iclassNo=b)printf(“姓名:%st 平均分 =%5.3fn“,(p+i)-name,averi);/对某个专业的学生,按某门课程成绩由低到高进行直接插入排序void Sort_insert(STU *p)int i,j,id,tem;int scoreN;char

12、 b10;int k=0; /用于计算学生数STU *m;m=p;getchar(); /吸收回车字符,避免让功能编号赋值到 bprintf (“请输入你想查看成绩的专业:(c,n,s)n“);gets(b);printf (“请输入你要查看分数的课程(0,1,2)n“);scanf (“%d“,getchar();for (i=0; imajor,b)=0)scorek=p-scoreid;k+; /计算所选班级的学生数for (i=1; i=0printf(“n“);/班级和成绩的综合查找void Search(STU *head)STU *p;int b,k,sum_scores;int

13、 limit_score; k=0 ; / 如果输入班级或总成绩有误,k 的值不变。与后面的 if 相关联。printf (“请输入班级号(1,2)n“);scanf (“%d“,getchar();printf (“请输入总成绩=*的学生(* 为分数)n“);scanf (“%d“,printf (“ tttt%d 班总成绩=%d 的学生信息为:tttt n“,b,limit_score);for (p=head;pscore0)+(p-score1)+(p-score2);if(p-classNo)=b)if (sum_scores = limit_score) /满足班级号和成绩界限的才

14、可以输出,不然k=0;printf (“该学生详细信息为:n“);Output(p);printf(“n“);k+;if (k=0)printf (“您查找的数据不存在:n“);/询问是否返回的函数void Ask()int c;printf(“n 您所需要的功能已实现,是否继续进行?n“1“ 继续 ; “2“ 退出系统n“);scanf(“%d“,if (c=2)exit(0);/读取全部信息;void Load(STU *p)char filename15;FILE *fp;printf(“要打开的文件名:n“);gets(filename);if(fp=fopen(filename,“r

15、b“)=NULL)printf(“文件打开失败!“);return;if(fread(p+,sizeof(STU),N,fp)!=N)printf(“文件读取失败!请重试!“);return;else printf(“文件读取成功!请进行下一步操作!nn“);fclose(fp);五、程序测试(输入、输出的截图及文件的内容)输入 10 个同学的信息:保存文件:打开文件,并且全部读取文件中的内容:显示文件中的全部学生信息:(按照最初写入顺序(学号顺序)排列)随机读取某个同学(第 1-10 个)的信息,并显示:随机读取某个同学(第 1-10 个)的信息,并覆盖到存放位置号的学生信息中(不显示):在

16、全年级中求某门成绩的最高分,并输出了得最高分的同学的姓名:按照平均成绩由低到高排列(选择法):对某个班级的学生,按平均成绩由高到低进行排列(冒泡法):对某个专业的学生,按某门课程成绩由低到高进行排序(插入法):例如,software ,课程 2:例如,computer,课程 1:班级和总成绩的综合查找:例如,1 班,总成绩大于 240 分以上的同学信息:六、实验总结(实验过程中遇到的具体问题,如何解决,不要说空话、套话,雷同扣分)遇到的问题:1.在第八个函数中,需要自行输入想查看的“字符型”专业名称,但是运行时,发现输入专业后,无法进行排序操作。后来发现了错误的原因。那是因为在此之前,需要输入

17、功能编号“8” ,而我没有在 gets(b)函数(b 为专业名称的字符串)的前面加上 getchar()这个函数。导致我输入的“8”变成了我想要查看的专业字符,所以无法查找到对应专业的学生,也就无法排序了。2.在 Ask 这个函数中,我 printf 了这样一句话“ 您所需要的功能已实现,是否继续进行 ?“1“ 继续 ; “2“ 退出系统“) ;就是这样简单的一句话,却折磨了我半个小时,一直提示有错。error C2143: syntax error : missing ) before constant。我反复的检查,终于发现了错误,因为我在“1”和“2”的双引号之前没有加上反斜杠 !所以编译器就识别不了 1 和 2 两边的双引号和 printf 的双引号了,所以报错了。所以说,小的细节也会让人反思,这种问题我以后也会多多注意。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报