C语言程序设计报告—学生选修课程系统_第1页
C语言程序设计报告—学生选修课程系统_第2页
C语言程序设计报告—学生选修课程系统_第3页
C语言程序设计报告—学生选修课程系统_第4页
C语言程序设计报告—学生选修课程系统_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、杜舒静 2012年6月12号C语言程序设计报告学 校:扬州大学学 院:信工学院班级序号:计科1101学 号:111404107姓 名: 杜舒静指导老师: 徐永安C语言程序设计报告一、题目学生选修课程系统设计假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。1、要求:试设计一个选修课程系统,使之能提供以下功能:(1) 系统以菜单方式工作。(2) 课程信息和学生选课信息输入功能(课程信息用文件保存)入。(3) 课程信息浏览功能输出。(4) 查询功能(至少一种查询方式)算法。(5) 按学分查询

2、。(6) 某门课程学生选修情况(可选项)。2、分析:由于题目要求将学生的选课信息用结构体形式输入,并写入文件中,所以应提供文件的输入输出等操作:在过程中需有浏览、插入、修改、查找、删除学生选课信息等操作,顾应分别建立个功能模块;另外还应提供键盘式选择菜单实现程序运行。3、总体设计:根据题目要求,可以将系统分为六个模块:1) 系统以菜单方式工作模块;2) 课程信息与学生选课信息录入功能模块;3) 课程信息浏览功能模块;4) 查询模块;5) 按学分查询模块;6) 某些课程学生选修情况模块。课程信息管理系统系统以菜单方式工作录入并存储信息课按学分和课程信息对程进行查询对信息进行操 作N4详细设计:

3、#include stdio.h#include string.h#include stdlib.h/标准库头文件,包含system()、malloc()、#includemalloc.h/ 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。/void prin1();void choose();typedef struct subjects int courseCode; /课程编号 char courseName20; /课程名称 char courseType10; /课程性质 int totalperiod; /总学时 int classperiod; /授课学

4、时 int experiperiod; /实验或上机学时 float creditHour; /学分 int term; /开课学期 struct subjects *next;/next是指针变量,指向结构体变量,链表SUB;SUB *head=NULL;/head,头指针SUB *create_form() /创建链表 SUB *head,*tail,*p;/定义结构体指针变量 int courseCode,totalperiod,classperiod; int experiperiod,term; float creditHour; char courseName20,courseTy

5、pe10; int size=sizeof(SUB); head=tail=NULL;/将空地址赋给头指针,链表中无结点 printf(输入选修课程信息:n); scanf(%d%s%s%d%d%d%f%d,&courseCode,courseName,courseType,&totalperiod,&classperiod,&experiperiod,&creditHour,&term);while(courseCode!=0) p=(SUB *)malloc(size);/开辟动态存储区,把起始地址赋给p p-courseCode=courseCode; strcpy(p-courseNa

6、me,courseName);/复制到节点中 strcpy(p-courseType,courseType); p-totalperiod=totalperiod; p-classperiod=classperiod;/指向结构体变量中的成员 p-experiperiod=experiperiod; p-creditHour=creditHour; p-term=term; if(head=NULL) head=p;/,如果链表为空,head指向该结点 else tail-next=p;/tail的next成员指向p结点 tail=p; scanf(%d%s%s%d%d%d%f%d,&cour

7、seCode,courseName,courseType,&totalperiod,&classperiod,&experiperiod,&creditHour,&term); /输入成员变量 tail-next=NULL;/如果为空 return head;/返回头指针void savefile() /保存文件 SUB *p;/定义SUB类型的指针 FILE *fp;/打开一个文件,文件指针返回 fp=fopen(2.txt,w);/打开此文件 if(fp=NULL)exit(0); printf(课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n); for(

8、p=head;p;p=p-next)/把第一个结点赋给pfprintf(fp,%5d%12s%9s%9d%9d%11d%11.6f%7dn,p-courseCode,p-courseName,p-courseType,p-totalperiod,p-classperiod,p-experiperiod,p-creditHour,p-term); fclose(fp);/fprintf()的返回值是输出的字符数,关闭一个流 printf(创建后的信息已放入2.txt文件中n); system(pause);void savefile1() /保存文件 SUB *p;FILE *fp;fp=fop

9、en(3.txt,w); if(fp=NULL)exit(0); for(p=head;p;p=p-next)fprintf(fp,%5d%12s%9s%9d%9d%11d%11.6f%7dn,p-courseCode,p-courseName,p-courseType,p-totalperiod,p-classperiod,p-experiperiod,p-creditHour,p-term); fclose(fp); printf(创建后的信息已放入3.txt文件中n); system(pause); void prin() /浏览所有课程SUB *ptr;/ptr字节操作head=NUL

10、L;if(head=NULL)/无存储单元printf(nnt没有此门课程记录!n);return;printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)printf(%5d%12s%9s%9d%9d%11d%11.6f%7dn,ptr-courseCode,ptr-courseName,ptr-courseType,ptr-totalperiod,ptr-classperiod,ptr-experiperiod,ptr-creditHour,ptr-term);system(pause);

11、void prin1() /浏览所有选修课程SUB *ptr;FILE *fp;if(fp=fopen(3.txt,r)=NULL)/如果文件打不开printf(Cannot open file.n);choose();printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);while(!feof(fp)/如果文件未结束ptr=(SUB*)malloc(sizeof(SUB);fscanf(fp,%d%s%s%d%d%d%f%dn,&ptr-courseCode,ptr-courseName,ptr-courseType,&ptr-totalperio

12、d,&ptr-classperiod,&ptr-experiperiod,&ptr-creditHour,&ptr-term);printf(%5d%12s%9s%9d%9d%11d%11.6f%7dn,ptr-courseCode,ptr-courseName,ptr-courseType,ptr-totalperiod,ptr-classperiod,ptr-experiperiod,ptr-creditHour,ptr-term);system(pause);void *insert()/插入课程信息 SUB *ptr,*subj; int size=sizeof(SUB); char

13、ch,ch1; while(ch!=0) subj=(SUB *)malloc(size); ptr=subj; printf(输入要插入的课程信息:n); printf(ntt请输入课程编号:);scanf(%d,&subj-courseCode); printf(ntt请输入课程名称:);scanf(%s,&subj-courseName); printf(ntt请输入课程性质:);scanf(%s,&subj-courseType); printf(ntt请输入总学时:);scanf(%d,&subj-totalperiod); printf(ntt请输入授课学时:);scanf(%d,

14、&subj-classperiod); printf(ntt请输入实践或上机学时:);scanf(%d,&subj-experiperiod); printf(ntt请输入学分:);scanf(%f,&subj-creditHour); printf(ntt请输入开课学期:);scanf(%d,&subj-term); printf(n添加完毕,新信息存入文件中n);printf(n继续插入请按回车结束请按空格键:n);ch1=getchar(); /将回车键赋给CH1,否则subj-term输完后输入的回车键会赋给CH,因此用CH1填补。ch=getchar(); return head;v

15、oid *del() /删除课程SUB *p1,*p2;char ch,ch1;int courseCode;while(ch!=0)printf(输入想要删除的课程编号: bbbbb);scanf(%d,&courseCode);if(head-courseCode=courseCode)/head指向编号结点p2=head;/将p2指向该结点head=head-next;/head指向下一个结点free(p2);/释放if(head=NULL)return NULL;p1=head;p2=head-next;while(p2)if(p2-courseCode=courseCode)p1-n

16、ext=p2-next;/p1指向编号所在结点free(p2);else p1=p2;p2=p1-next;printf(n继续删除请按回车,结束请按空格键:n);ch1=getchar(); /将回车键赋给CH1,否则courseCode输完后再输入的回车键会赋给CH,因此用CH1填补。ch=getchar();printf(n删除完毕,新信息存入文件中n);system(pause); return head;system(pause);void choose()/选新课程-学生选课函数SUB *p,*q;int a5;int courseCode,total=0,i=0,j;/给总分,编

17、号赋初值printf(输入要选修的课程的编号,编号之间以空格分开n);scanf(%d,&courseCode);printf(如果确认输入完要选修的课程的编号,请输入0: bb);while(courseCode!=0)for(p=head;p;p=p-next)if(p-courseCode=courseCode)total=total+p-creditHour;/将学分赋给总分ai=courseCode;i+;/编号自增scanf(%d,&courseCode);FILE *fp;fp=fopen(3.txt,w);/打开文件fprintf(fp,课程编号 课程名称 课程性质 总学时 授

18、课学时 实践或上机学时 学分 开课学期n);for(j=0;jnext)if(q-courseCode=aj)/q指向某一编号fprintf(fp,%5d%12s%9s%9d%9d%11d%11.6f%7dn,q-courseCode,q-courseName,q-courseType,q-totalperiod,q-classperiod,q-experiperiod,q-creditHour,q-term);/输出此课程信息fclose(fp);printf(ttn*选修成功!*n);printf(n您选修的课程总学分为%d,课程分别为:n,total);printf(n课程编号 课程名称

19、 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(j=0;jnext)if(q-courseCode=aj)printf(%5d%12s%9s%9d%9d%11d%11.6f%7dn,q-courseCode,q-courseName,q-courseType,q-totalperiod,q-classperiod,q-experiperiod,q-creditHour,q-term);printf(n以上信息全部保存在3.txt中n);system(pause);void search() /课程信息查询 int a,courseCode; int t=1; char

20、 type10,min10;/定义查找课程名称 SUB *ptr; L1:system(cls);printf(nntt*请选择查询方式*n); printf(nttt1-按课程名称查找n); printf(nttt2-按课程性质查找n); printf(nttt3-按学分查找n); printf(nttt4-退出查找n); printf(nntt*n); printf(nnChoose your courseCodeber1-4: bb); scanf(%d,&a); switch(a)/多分支选择语句 case 1:printf(请输入要查找的课程的名称:);scanf(%s,min);p

21、rintf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)if(strcmp(min,ptr-courseName)=0)/比较查找课程和结构体成员编号是否相同 printf(%5d%12s%9s%9d%9d%11d%11.6f%7dn,ptr-courseCode,ptr-courseName,ptr-courseType,ptr-totalperiod,ptr-classperiod,ptr-experiperiod,ptr-creditHour,ptr-term); t=0;/如果相同,输出

22、课程信息if(t) printf(tn未找到!n);t=1;system(pause);goto L1;/指定跳转到l1,程序将处理从下一行开始的命令 case 2:printf(请输入要查找的课程的性质:); scanf(%s,type); printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n); for(ptr=head;ptr;ptr=ptr-next) if(strcmp(type,ptr-courseType)=0) printf(%5d%12s%9s%9d%9d%11d%11.6f%7dn,ptr-courseCode,ptr-course

23、Name,ptr-courseType,ptr-totalperiod,ptr-classperiod,ptr-experiperiod,ptr-creditHour,ptr-term); t=0;if(t) printf(tn未找到!n);t=1;system(pause);goto L1; case 3:printf(输入要查找的课程的学分:); scanf(%d,&courseCode); printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n); for(ptr=head;ptr;ptr=ptr-next) if(ptr-creditHour=c

24、ourseCode) printf(%5d%12s%9s%9d%9d%11d%11.6f%7dn,ptr-courseCode,ptr-courseName,ptr-courseType,ptr-totalperiod,ptr-classperiod,ptr-experiperiod,ptr-creditHour,ptr-term); t=0;if(t) printf(nt未找到!n);t=1;system(pause);goto L1;case 4:break; void Students()int n,w=1; do system(cls);puts(nnttttt欢迎进入n); puts(nntt*学生菜单*nn); puts(tttt1-浏览所有课程n);puts(tttt2-浏览所有选修课程n);puts(tttt3-查询课程信息n); puts(tttt4-选择选修课程n); puts(tttt5-删除错选课程n);puts(tttt6-返回主菜单); puts(nntt*n);

温馨提示

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

评论

0/150

提交评论