学生和教师信息管理系统 C语言课程设计_第1页
学生和教师信息管理系统 C语言课程设计_第2页
学生和教师信息管理系统 C语言课程设计_第3页
学生和教师信息管理系统 C语言课程设计_第4页
学生和教师信息管理系统 C语言课程设计_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录一、课题内容 2二、总体设计 51、系统要求 52、系统结构总框图 6三、详细设计 7(一)、界面设计 7(二)、程序介绍 15(三)、使用方法 20四、程序中出现的问题及解决方法 20五、其他题目的源代码 21六、源代码42七、学习心得 60一:课题内容(一)学生成绩排名先采用选择法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,最后将排好序的成绩单进行反序存放。步骤、方法与要求1 定义一个数组a11,用以存放学生的成绩。2 从键盘输入10个学生成绩。3 采用选择法,将学生成绩按照从高到低进行排序。4 再输入一个学生的成绩,将此成绩按

2、照排序规律插入原学生成绩数组。5 将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列。6 将以上每一步骤的结果均打印输出,验证程序是否正确实现题目要求。(二) 根据条件进行学生成绩排名在函数中进行 10个学生成绩从高到低排名, 再改进函数, 进行 n个学生成绩从高到低排名,排名方式根据函数的style参数进行,如style为a按升序排,style为 d 按降序排。( a:ascending 升,d:descending 降)编写多个不同函数,使之能实现不同的排序算法(3种以上),再编写一个通用输出函数,(要求用函数指针做参数)能分别打印不同排序算法的结果。步骤、方法与要求1.

3、 在函数中进行10个学生成绩从高到低排名 sort(int a10)2. 改进第一步的函数为sort(int a,int n),进行n个学生成绩从高到低排名,3. 改进第二步的函数为sort(int a,int n, char style), 将n个学生成绩从高到低排名,排名方式根据sort()函数的style参数进行,如style为a按升序排,style为d按降序排。(a:ascending 升,d:descending 降)4. 编写4个排序函数,实现4种不同的排序算法(用冒泡法进行升序排序,用冒泡法进行降序排序,选择法进行升序排序,选择法进行降序排序等),函数返回指向排好序的数组的指针。

4、5. 编写通用输出函数 show(int(* fun)(int,int),int a , int n ),其中a为成绩数组,n为数组元素个数。6. 编写主函数调用以上函数。(三)链表的操作(链表的建立,访问,删除链表指定结点,增加结点)建立一个动态链表,将学生数据(学号,成绩)存入链表结构中,实现链表的访问(求学生成绩的平均分,找到最高分,最低分,将其数据输出)。删除指定学号的学生数据,对学生数据进行排序,分别在链表头部,中间,末尾插入学生数据。(四) 学生成绩文件管理定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三

5、门课程的平均分数最高的学生的学号、姓名及其平均分,将10个学生的相关数据,存入文件中,再从文件中读出,按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第 1 ,3 , 5 ,7, 9个学生的数据。内容、步骤、方法与要求1 定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩2 从键盘输入10个学生的以上内容3 输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩4 输出三门课程的平均分数最高的学生的学号、姓名及其平均分5 从键盘输入10个学生的以上内容,存入文件stud.dat,关闭文件6 打开stud.dat文件,将数据读出,查看是否正确写入,关闭

6、文件。7 打开文件stud.dat文件,读出数据,将10个学生按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件studsort.dat中。8 从studsort.dat 文件中读取第1,3,5,7,9个学生的数据。(五)教师信息管理系统设计教师信息包括教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等(教师号不重复)。试设计一教师信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作v(2)教师信息录入功能输入v(3)教师信息删除功能v(4)教师信息浏览功能输出v(5)查询和排序功能:(至少一种查询方式) 算法vl 按教师号查询l 按职称查询等要求:(1)设计一个主函数

7、和多个子函数,每个子函数完成一个相对独立的子功能。(2)程序运行时,首先进行口令检查,再显示菜单。并能根据菜单调用相应的函数功能。 口令程序段的功能要求: 1提示用户输入一个口令。 2用户输入口令后,若口令对,则提示用户通过,可执行后续程序;否则不通过。 3可对用户的口令输入进行次数限制(如:重复输入3次都不对),则自动退出系统。(3)显示数据时,一页显示不下,可分页显示。二:总体设计(一)、仔细阅读系统要求,首先将此系统化分为如下模块/功能(即如下函数) 1、录入功能:可用函数teacher *insert(struct teacher *head,struct teacher *teach

8、) ;函数来实现。其中包括教师的教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等相关信息。 2、浏览功能:可用output(struct teacher *L) 函数来实现。找到就输出此教师全部信息包括教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等信息。 3、查询功能:可用teacher* inquiry(struct teacher *L)函数来实现。通过教师号和职称来查询教师的全部信息。 4、删除功能:可用teacher* Delete(struct teacher *L)函数来实现。其中通过教师号查询删除所选择的信息。 5、修改功能:可用teacher *fix(str

9、uct teacher *head) 函数来实现。其中通过教师号查询修改所选择的信息。 6、保存功能:可用save(struct teacher *L)函数来实现。 7、加载功能:可用*load() 函数来实现。 8、退出系统:首先将信息保存到文件中,释放动态创建的内存空间,再直接退出此程序。(二):系统主模块结构图:主程序初始化浏览查询删除修改保存返回退出二详细设计(一)、界面设计1,此系统界面采用图形和数字化菜单主界面设计如下:1:打开程序界面2:初始化界面3:操作主界面 4:修改教师信息5:保存数据6:教师信息显示兼分页7:查询教师信息8:新增教师信息9:按教师号排序(二)、程序介绍1,

10、main函数登入选项1 2 2初始化信息退出scanf(%d,&l);输入选择所需的项,进入相应的菜单2,录入函数scanf(%d,&r);选择录入函数printf(请分别输入教师号、姓名、性别、年龄、学历、职称、工资、住址、电话n);scanfdata(p1);调用通用输入函数根据各个步骤输入相应的数据fprintf(fp,%ld %s %s %d %s %s %d %s %ldn,p1-num,p1-name,p1-sex,p1-age,p1-education,p1-position,p1-wage,p1-addr,p1-phone);载入文件是否输入为“0”YESNOfprintf(f

11、p,0 0 0 0 0 0 0 0 0);fclose(fp);退出继续输入3,浏览函数if(L-next)!=NULL)yes no 分6个为一页输出数据 printf(没记录n); scanf(%d,&c); 0 1 2 返回菜单 翻下页 翻上页 退出通过直接调用通用输出函数void output(struct teacher *head)浏览一输入存储的数据if(L-next)!=NULL)if(L-next)!=NULL)if(L-next)!=NULL)if(L-next)!=NULL)4,查询函数scanf(%ld,&num);输入要查询的教师号判断是否存在该教师号存在不存在输出该

12、教师的全部信息printf(查询失败n);退出exit5,删除函数scanf(%d,&r);选择删除函数printf(请输入要删除的教师号:n);输入要删除的教师号该教师号是否存在 是 否 输出删除后,文件的所有数据提示该教师号不存在,重新输入退出exit6,修改函数scanf(%d,&l);选择修改函数printf(请输入要修改的教师号:n);输入要修改的教师号该教师号是否存在是 否printf(该教师原信息:n);输出教师的原信息printf(没有此数据n);printf(请重新输入该教师的所有信息:n);scanfdata(p1);调用通用输出函数printf(修改成功n);printf

13、(该教师修改后信息:n);输出教师修改后的信息退出exit7,保存函数 数据经过读入、修改、删除之后,都有一定得变化,在这些动作之后,为了确保所修改过的信息能够保存好,得进行保持的步骤。通过fp=fopen(teacher_list.dat,a);等函数的步骤把数据保存进文件teacher_list.dat中8,读取函数数据一但写出保存到磁盘中后,更多的操作是将数据从文件读入内存,进行显示、查找等各项操作。 按照文件的读写要求,创建定义一个文件teacher_list.dat,然后输入要调用的命令,通过地址值传递的方式调入数据(三)、使用方法运行环境:Microsoft Visual C+ 6

14、.0,建议系统是windows使用者:必须熟悉Microsoft Visual C+ 6.0软件的运行操作,并有一定得软件编程知识密码验证(LOVECONGCONG)运行步骤:进入主界面信息录入信息删除信息浏览信息查询信息修改信息保存文件加载退出运行程序三程序中出现的问题及解决方法1,如何使程序简洁明了?答:进行分模块的方式,尽量减少主函数的代码数,尽量细化其他函数,使其功能单一,有利于程序的阅读及修改。四源代码第一题#includevoid main()float a11,b,*p;int i,j;void sort(float a,int n);void cong(float a,int

15、n);p=a;for(i=0;i10;i+)scanf(%f,p+);p=a;i=0;for(i=0;i10;i+,p+)printf(%f,*p);printf(n); printf(以上为输入数据n); p=a; sort(p,10); i=0; for(i=0;i10;i+)printf(%f,*p);p+;printf(n); printf(以上为从大到小的排序n请输入插入数n); scanf(%f,&a10); printf(插入%fn,a10);p=a;sort(p,11); p=a; for(i=0;i11;i+) printf(%f,*p);p+; printf(n); pri

16、ntf(以上为插入结果n); p=a; cong(p,11); p=a; for(i=0;i11;i+) printf(%f,*p);p+; printf(n); printf(以上为反序结果n); void sort(float a,int n) int i,j,k; float t; for(i=0;in-1;i+) k=i; for(j=i+1;jak)k=j; if(k!=i) t=ai;ai=ak;ak=t; void cong(float a,int n) int i,j; float t; for(i=0,j=n-1;in/2+1;i+,j-)t=ai;ai=aj;aj=t;第二

17、题#includeint*sort0(int x) /*原始函数*/int i,j,k,t; for(i=0;i9;i+)k=i; for(j=i+1;jxk)k=j; if(k!=i) t=xi;xi=xk;xk=t; return x;int*sort1(int x,int n) /*改进函数一*/int i,j,k,t; for(i=0;in-1;i+)k=i; for(j=i+1;jxk)k=j; if(k!=i) t=xi;xi=xk;xk=t; return x;int*sort2(int x,int n, char style) /*改进程序二*/int i,j,k,t;int*

18、sort1(int x,int n); if(style=a) for(i=0;i9;i+)k=i; for(j=i+1;j10;j+) if(xjxk)k=j; if(k!=i) t=xi;xi=xk;xk=t; if(style=b) sort1(x,n); return x;int*paoup(int x,int n) /*气泡升序*/int i,j,t; for(j=0;jn-1;j+) for(i=0;ixi+1) t=xi;xi=xi+1;xi+1=t; return x;int*paodown(int x,int n) /*气泡降序*/int i,j,t; for(j=0;jn-

19、1;j+) for(i=0;in-1-j;i+) if(xixi+1) t=xi;xi=xi+1;xi+1=t;return x; void pri(int x,int n)int i;for(i=0;in;i+)printf(%d,xi);printf(n);void show(int*(*fun)(int*,int),int* x,int n)int i;fun(x,n);for(i=0;in;+i)printf(%d,xi);printf(n);void main()int x100;int n,i;char style;int*sort0(int x);int*sort1(int x,

20、int n);int*sort2(int x,int n, char style) ;int*paoup(int x,int n);int*paodown(int x,int n);void pri(int x,int n);void show(int *(*fun)(int*,int),int *x,int n);printf(请输入将要输入数据的个数n);scanf(%d,&n);printf(请输入存储数据n);for(i=0;in;i+)scanf(%d,&xi);if(n=10)printf(以下为调用原始函数后的排序结果n);pri(x,n);printf(以下为调用函数一排序结果

21、n);show(&sort1,x,n); printf(请选择a或b方案);scanf(%f,&style);sort2(x,n,style) ;printf(以下为调用函数二的排序结果n);pri(x,n); printf(以下为冒泡升序的排序结果n);show(&paoup,x,n); printf(利用show,以下为冒泡降序的排序结果n);show(&paodown,x,n);第三题#include#include#define LEN sizeof(struct student)struct student int num; int score1; int score2; int a

22、ver; struct student*next;struct student*Delete(struct student*p,struct student*head) /*删除节点*/struct student*q;int e,f,g,i;if(p=head)head=head-next;elseq=p-next;p-next=q-next;e=q-num;f=q-score1;g=q-score1;i=q-aver;free(q);return head; struct student*Delete2(struct student*p,struct student*head) /*删除第

23、二个节点*/struct student*q,*x;int e,f,g,i;x=head;q=p-next;p-next=q-next;e=q-num;f=q-score1;g=q-score1;i=q-aver;free(q);return x; /=int average(struct student*p) /*求平均分*/int e; e= (p-score1+p-score2)/2; p-aver=e; return e; /=int max(struct student*p,int n) /*寻找最大平均分的学生的学号*/int i,a=0;int average(struct st

24、udent*p); for(i=0;in;i+) average(p); if(anext; return a; /=int min(struct student*p,int n) /*寻找最小平均分的学生学号*/int i,a=1000;int average(struct student*p); for(i=0;iaverage(p)|a=average(p)a=average(p); p=p-next; return a; /=void px(struct student*p) /*降序排序*/struct student*i,*j;int a,b,c,d;for(i=p;i-next-

25、next;i=i-next)for(j=i-next;j-next;j=j-next) if(i-averaver)a=i-aver;i-aver=j-aver;j-aver=a; b=i-num;i-num=j-num;j-num=b; c=i-score1;i-score1=j-score1;j-score1=c; d=i-score2;i-score2=j-score2;j-score2=d; /=struct student*inserttop(struct student*p,int i,int j,int k) /*在链表头部插入一个节点*/ struct student*a; i

26、nt average(struct student*p) ; a=p;p=(struct student*)malloc(LEN);p-num=i;p-score1=j;p-score2=k;p-aver=average(p);p-next=a;return p; /=void inserttail(struct student*p,int c,int d,int e) /*尾部插入*/ struct student*a,*b; struct student*i; int average(struct student*p) ; for(i=p;i-next;i=i-next) a=i; a-n

27、ext-num=c; a-next-score1=d; a-next-score2=e; a-next-aver=average(a-next); b=(struct student*)malloc(LEN);b-next=NULL;a-next-next=b; void main() struct student*head,*p,*g; int n,i,j=0,a,b,m,A,B,C,E,D,X; struct student*h; int average(struct student*p) ; int max(struct student*p,int n); int min(struct

28、student*p,int n); struct student*Delete(struct student*p,struct student*head); void px(struct student*p); struct student*inserttop(struct student*p,int i,int j,int k); void inserttail(struct student*p,int c,int d,int e);struct student*Delete2(struct student*p,struct student*head); head=p=(struct stu

29、dent*)malloc(LEN); printf(请输入将要储存学生数据的个数n); scanf(%d,&n); printf(请输入学生数据n); for(i=0;inum,&p-score1,&p-score2); g=p; p=(struct student*)malloc(LEN); g-next=p;p-next=NULL;p=head;printf(以下为所有学生的学号及对应平均分n);for(i=0;inum,average(p); p=p-next;p=head;printf(以下为平均分最高的学生学号及其分数n); a=max(p,n);p=head; for(i=0;in

30、um,p-score1,p-score2,a);p=p-next;p=head;printf(以下为平均分最低的学生学号及其分数n); b=min(p,n);p=head;for(i=0;inum,p-score1,p-score2,b);p=p-next;printf(请输入要删除数据的学生学号n);scanf(%d,&m);p=head;if(p-next-num=m)h=p;head=Delete2(h,head);else if(head-num=m)h=head;else for(i=0;inext-num=m)h=p; p=p-next;printf(以下为删除后链表中的所有数据n

31、);if(h=head)head=Delete(h,head); else Delete(h,head);for( p=head;p-next;p=p-next)printf(%d,%d,%dn,p-num,p-score1,p-score2); printf(按平均分的降序排序n);p=head; px(p);for(p=head;p-next;p=p-next)printf(%d,%d,%d,%dn,p-num,p-score1,p-score2,p-aver); p=head;printf(头插入法:请输入学生学号,成绩1,成绩2n);scanf(%d%d%d,&A,&B,&C); he

32、ad=inserttop(p,A,B,C); printf(输出节点的第一个数据n); printf(%d,%d,%d,%dn,head-num,head-score1,head-score2,head-aver); p=head; printf(尾插法:请输入学生学号,成绩1,成绩2n); scanf(%d%d%d,&E,&D,&X); inserttail(p,E,D,X); printf(以下为插入后,链表的所有数据n); for(p=head;p-next;p=p-next)printf(%d,%d,%d,%dn,p-num,p-score1,p-score2,p-aver); 第四题

33、#include#include#includestruct studentchar name20;int num;int score3;int aver;stu10;void high(struct student stu10,int n) /*单科最高分*/int i,m=0;for(i=0;im)m=stui.scoren;for(i=0;i10;i+)if(stui.scoren=m)printf(score%d最高分的学生名字学号成绩分别为:%s%5d%5dn,n,,stui.num,stui.scoren); /=int avere(struct student

34、stu10,int i) /*求平均分*/int a;a=(stui.score0+stui.score1+stui.score2)/3;return a; /=int high_aver(struct student stu10) /*求最高平均分*/int avere(struct student stu10,int i);int i,a=0,b;for(i=0;i10;i+)b=avere(stu,i);if(ab)a=b;return a; /=void save(struct student stu10) /*存入文件中并输出文件内容*/FILE*fp;int i;if(fp=fop

35、en(stud.dat,wb)=NULL)printf(无法打开此文件n);exit(0);for(i=0;i10;i+)fwrite(&stui,sizeof(struct student),1,fp);fclose(fp); /=void save1(struct student stu10) /读取文件信息FILE*fp;int i;if(fp=fopen(stud.dat,rb)=NULL)printf(无法打开此文件n);exit(0);printf(以下为stud.dat中读出的数据n);for(i=0;i10;i+)fread(&stui,sizeof(struct studen

36、t),1,fp);printf(%s%5d%5d%5d%5dn,,stui.num,stui.score0,stui.score1,stui.score2);fclose(fp); /=void save2(struct student stu10) /*存入文件中并输出文件内容*/FILE*fp;int i;if(fp=fopen(studsort.dat,wb)=NULL)printf(无法打开此文件n);exit(0);printf(以下为降序排列的结果n);for(i=0;i10;i+)printf(%s%5d%5d%5d%5dn,,stui.num

37、,stui.score0,stui.score1,stui.score2);fwrite(&stui,sizeof(struct student),1,fp);fclose(fp);void px(struct student stu10) /*降序排序*/int avere(struct student stu10,int i);int i,j,k;struct student t;for(i=0;i10;i+)stui.aver=avere(stu,i);for(i=0;i9;i+) k=i; for(j=i+1;jstuk.aver)k=j; if(k!=i)t=stui;stui=st

38、uk;stuk=t; /=void reading(struct student stu10)int i;FILE*fp;if(fp=fopen(studsort.dat,rb)=NULL)printf(无法打开此文件n);exit(0);printf(以下为第1,3,5,7,9的数据n);for(i=0;i10;i+=2)fseek(fp,i*sizeof(struct student),0);fread(&stui,sizeof(struct student),1,fp);printf(%s%5d%5d%5d%5d%5dn,,stui.num,stui.score0,st

39、ui.score1,stui.score2,stui.aver);fclose(fp);/=void main() /主函数void save2(struct student stu10);void save1(struct student stu10); void save(struct student stu10);void reading(struct student stu10);void high(struct student stu10,int n);int avere(struct student stu10,int i);int high_aver(struct student

40、 stu10); void px(struct student stu10);int i,b;printf(请输入十个学生的名字,学号,及三科成绩n);for(i=0;i10;i+)scanf(%s %d %d %d %dn,&,&stui.num,&stui.score0,&stui.score1,&stui.score2);save(stu);save1(stu); for(i=0;i3;i+) high(stu,i);printf(平均分最高的学生的名字,学号,平均分为n);for(i=0;i10;i+)stui.aver=avere(stu,i);b=high_ave

41、r(stu);for(i=0;i10;i+)if(stui.aver=b)printf(%s%5d%5dn,,stui.num,stui.aver);px(stu);save2(stu); reading(stu);第五题#include#include#include#includestruct teacherlong int num;char name20;char sex10;int age;char education50;char position30;int wage;char addr50;long int phone;struct teacher *next;/=struct teacher* insert(struct teacher *L) /*头插法插入*/struct teacher *p,*t;int n=1,i;p=(struct teacher*)malloc(sizeof(teacher);printf(请输入教师的教师号n); scanf(%ld,&p-num); printf(请输入教师的姓名n); scanf(%s,&p-name); printf(请输入教师的性别n); scanf(%s,&p-sex); printf(请输入教师的年龄n); scanf(%d,&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论