版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中国地质大学本科生课程论文封面课程名 称 C 语言课程设计教师姓名本科生姓名本科生学号本科生专业所在院系类别:c.本科生日期:2012年09月05日ii课程设计评语对课程论文的评语平时成绩:课程论文成绩:总成绩:评阅人签名:注:1无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目录课程设计评语 2目 录 31课程论文题目 42程序设计思路 53功能模块图 54数据结构设计 65算法设计 66程序代码 127程序运行结果 228编程中遇到的困难及解决方法 239总结心得及良好建议 2410 致谢 24181课程论文题目名
2、称:学生选修课系统设计【要求】假定有 n 门课程,每门课程有课程编号,课程名称,课程性质, 总学时,授课时间,实验或上级时间,学分,开课学期等信息,学生 可按要求(如总学分不超过 60)自由选课。 是设计一选修课课程系统, 使只能提供以下功能:(1)系统一菜单方式工作(2)课程信息和学生选课信息录入功能(课程信息用文件保存 输入(3)课程信息浏览功能输出(4)查询功能(至少一种查询方式)算法(5)按学分查询(6)某门课程学生选修情况(可选项)【提示】数据结构可用结构体,包括授课和选课两个结构体,其中课程 结构体成员包括编号,课程名称,课程性质,总学时,授课学时,实 验或上机时间,学分,开课学期
3、。学秀结构体成员包括学号,课程编 号,该结构体的建立主要是为了查询某门课程学生选修情况。2程序设计思路由于题目要求将学生的选课信息用结构体形式输入,并写入 文件中,所以应提供文件的输入输出等操作:在过程中需有 浏览、插入、修改、查找、删除学生选课信息等操作,顾应 分别建立个功能模块;另外还应提供键盘式选择菜单实现程 序运行。根据题目要求,可以将系统分为六个模块:1) 系统 以菜 单方 式 工 作模块 ;2) 课程 信息 与学 生 选 课信息 录 入功 能 模块 ;3) 课程 信息 浏览 功 能 模块;4) 查询 模块 ;5) 按学 分查 询模 块 ;6) 某些课程学生选修情况模块3功能模块图学
4、生选修课程系统些程生修况块 某课学选情模4 数据结构设计该程序采用多个main ()函数模块分别来实现程序的运行,通过使用 数组功能来实现数据的录入,使用strcpy ()函数来实现录入信息的复制,整个结构从整体来看使用了选择结构,break .case .的合理利用5 算法设计1.课程信息录入功能void savefile(SUB *head)SUB *p;FILE *fp;fp=fope n( subjects.txt,w);fprin tf(fp, 课程编号 课程名称 课程性质 机学时 学分 开课学期n);for(p=head;p;p=p-n ext)fprin tf(fp,%5d%12
5、s%9s%9d%9d%11d%11d%7d stime,p-ttime,p-etime,p-score,p-term);fclose(fp);总学时 授课学时 实验或上n “,p_ n um,p_ n ame,p-ki nd,p-void savefileadd(SUB *head)SUB *p;FILE *fp;fp=fope n( subjectsadd.txt,w);fprin tf(fp,课程编号 课程名称上机学时 学分 开课学期n);for(p=head;p;p=p-n ext)课程性质 总学时 授课学时 实验或fprin tf(fp,%5d%12s%9s%9d%9d%11d%11d
6、%7dn ”,p- num,p- name,p-ki nd,p-stime,p-ttime,p-etime,p-score,p-term);fclose(fp);2查询功能void search(SUB *head)开始n ext)if(strcmp(type,ptr-ki nd)=0)prin tf(%5d%12s%9s%9d%9d%11d%11d%7dn ”,ptr- num,ptr- name,ptr-ki nd,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf( 未找到!n”);t=1;break;ca
7、se 2:printf(”输入要查找的课程的学分n);scan f(%d,&n um);printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上 机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr- n ext)if(ptr-score=nu m)printf(%5d%12s%9s%9d%9d%11d%11d%7d n,ptr-num,ptr-name,ptr-kind,pt r-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf( 未 找 到 !n);t=1;printf(”继续
8、查找请按回车键,结束请按空格键:n);ch1=getchar();/ 将 回 车 键 赋 给 CH1 ,否 则 CASE 里 面 最 后 输 入 的 回 车 键 会 赋 给 CH , 因 此 用 CH1 填 补 。ch=getchar();3.插入、删除信息功能SUB *insert(SUB *head)SUB *ptr,*ptr2,*subj;int size=sizeof(SUB);char ch=a,ch1;while(ch!= )subj=(SUB *)malloc(size); ptr=subj;printf( 输 入 要 插 入 的 课 程 信 息 :n);scanf(%d%s%s
9、%d%d%d%d%d,&subj-num,subj-name,subj-kind,&subj-stime,&subj-ttime,&subj-etime,&subj-score,&subj-term);if(head=NULL)head=ptr;head-next=NULL;else-next)for(ptr2=head;ptr2;ptr2=ptr2 if(ptr2-next=NULL) ptr2-next=subj; subj-next=NULL; break;printf(”继续插入请按回车,结束请按空格:n);ch1=getchar();/ 将 回 车 键 赋 给 CH1 , 否 则su
10、bj-term 输完后输入的回车键会赋给 CH, 因此用 CH1 填补。ch=getchar();return head;SUB *del(SUB *head)SUB *p1,*p2;char ch=a,ch1;int num;while(ch!= )printf(”输入想要删除的课程编号:n);scanf(%d,&num);if(head-num=num)p2=head;head=head-next;free(p2);if(head=NULL)return NULL;p1=head;p2=head-next;while(p2)if(p2-num=num)p1-next=p2-next;fre
11、e(p2);else p1=p2;p2=p1-next;printf( 继 续 删 除 请 按 回 车 , 结 束 请 按 空 格 :n);ch仁getchar();II将回车键赋给 CH1 ,否则num输完后再输入的回车键会赋给CH ,因此用CH1填补。ch=getchar();retur n head;4.选课功能void choose(SUB *head)选定、输岀结束SUB *p,*q;int a5;int nu m,total=0,i=0,j;printf(”输入要选修的课程的编号,编号之间以空格分开,输完后以0结束n); scan f(%d,&n um);while( nu m!=
12、0)for(p=head;p;p=p-n ext)if(p-num=nu m)total=total+p-score;ai=num;i+;scan f(%d,&n um);if(total60) printf(选修总学分未达到60,选 修失败!n”);else printf( 选 修成功!n); printf(您选修的课程为:n”);for(j=0;jn ext)if(q-num=aj)printf(%s printf(n);,q-name);printf(printf(H*printf(H*printf(H*n);n);n);n);6程序代码#include #include #includ
13、e typedef struct subjects int num;char name20;char kind10;int stime;int ttime;int etime;int score;int term;struct subjects *next;SUB;SUB *create_form()SUB *head,*tail,*p;int num,stime,ttime;int etime,score,term;char name20,kind10;int size=sizeof(SUB);head=tail=NULL;printf( 输入选修课程信息 :n);scanf(%d %s%s
14、%d%d%d%d%d,&num,&name,&kind,&stime,&ttime,&etime,&score,&term);while(num!=0)p=(SUB *)malloc(size);p-num=num;strcpy(p-name,name);strcpy(p-kind,kind);p-stime=stime;p-ttime=ttime;p-etime=etime;p-score=score;p-term=term;if(head=NULL)head=p;elsetail-next=p;tail=p;scanf(%d %s%s%d%d%d%d%d,&num,&name,&kind,
15、&stime,&ttime,&etime,&score,&term); tail-next=NULL;return head;void savefile(SUB *head)SUB *p;FILE *fp;fp=fopen(subjects.txt,w);fprintf(fp, 课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学 分 开课学期 n);for(p=head;p;p=p-next)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-tt ime,p-etime,p-score,p
16、-term);fclose(fp);void savefileadd(SUB *head)SUB *p;FILE *fp;fp=fopen(subjectsadd.txt,w);fprintf(fp, 课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学 分 开课学期 n);for(p=head;p;p=p-next)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-tt ime,p-etime,p-score,p-term); fclose(fp);void savefiledel(SUB
17、 *head)SUB *p;FILE *fp;fp=fopen(subjectsdel.txt,w);fprintf(fp, 课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学 分 开课学期 n);for(p=head;p;p=p-next)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-tt ime,p-etime,p-score,p-term);fclose(fp);void prin(SUB *head)SUB *ptr;if(head=NULL)printf( 没有此门课程记录
18、!n);return;printf( 课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期 n);for(ptr=head;ptr;ptr=ptr-next)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,p tr-ttime,ptr-etime,ptr-score,ptr-term);void search(SUB *head)int a,num;int t=1;char type10;char ch=a,ch1;SUB *ptr;while(ch!= )printf(
19、若要按课程性质查找请输入 1,若要按学分查找请输入 2:n);scanf(%d,&a);switch(a)case 1:printf( 请输入要查找的课程的性质 :n);scanf(%s,type);学分printf( 课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 开课学期 n);for(ptr=head;ptr;ptr=ptr-next)if(strcmp(type,ptr-kind)=0)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,p tr-ttime,ptr-etime,
20、ptr-score,ptr-term);t=0;if(t) printf( 未找到 !n);break;case 2:printf( 输入要查找的课程的学分 n);scanf(%d,&num);printf( 课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期 n);for(ptr=head;ptr;ptr=ptr-next)if(ptr-score=num)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,p tr-ttime,ptr-etime,ptr-score,pt
21、r-term);t=0;if(t) printf( 未找到 !n);t=1;printf( 继续查找请按回车键,结束请按空格键 :n);ch仁getchar();/将回车键赋给CH1否贝U CASE里面最后输入的回车键会赋给CH因此用CH1填补。ch=getchar();SUB *insert(SUB *head)SUB *ptr,*ptr2,*subj;int size=sizeof(SUB);char ch=a,ch1; while(ch!= )subj=(SUB *)malloc(size);ptr=subj;printf( 输入要插入的课程信息 :n);scanf(%d%s%s%d%d
22、%d%d%d,&subj-num,subj-name,subj-kind,&subj-stime,&subj-tt ime,&subj-etime,&subj-score,&subj-term);if(head=NULL)head=ptr;head-next=NULL;elsefor(ptr2=head;ptr2;ptr2=ptr2-next)if(ptr2-next=NULL)ptr2-next=subj;subj-next=NULL;break;printf( 继续插入请按回车,结束请按空格 :n);ch仁getchar();/将回车键赋给 CH1,否则subj-term 输完后输入的回车
23、键会赋给CH因此用CH1填补。ch=getchar();return head;SUB *del(SUB *head)SUB *p1,*p2;char ch=a,ch1;int num;while(ch!= )printf( 输入想要删除的课程编号 :n);scanf(%d,&num);if(head-num=num)p2=head;head=head-next;free(p2);if(head=NULL)return NULL;p1=head;p2=head-next;while(p2)if(p2-num=num)p1-next=p2-next;free(p2);else p1=p2;p2=
24、p1-next;:n);printf( 继续删除请按回车,结束请按空格28ch1=getchar();/将回车键赋给 CH1,否则num输完后再输入的回车键会赋给CH因此用CH1填补。ch=getchar();return head;void choose(SUB *head)SUB *p,*q;int a5;int num,total=0,i=0,j;0结束 n);printf( 输入要选修的课程的编号,编号之间以空格分开,输完后以 scanf(%d,&num);while(num!=0)for(p=head;p;p=p-next)if(p-num=num)total=total+p-sco
25、re;ai=num;i+;scanf(%d,&num);if(total60) printf(选修总学分未达到 60, 选修失败 !n);else printf(选修成功 !n);printf(您选修的课程为 :n);for(j=0;jnext)if(q-num=aj)printf(%s ,q-name);printf(n);printf(*n);printf(*n);printf(*n);printf(*n);void main()SUB *head=create_form();savefile(head);prin(head);search(head);注意此处的必要性,函数 insert
26、 的的返注意此处的必要性, 函数 del 的的返回值head=insert(head); / 回值重新赋给 head!savefileadd(head);printf( 修改后的信息为 :n); prin(head);head=del(head); / 重新赋给 head!savefiledel(head);printf( 修改后的课程信息为 :n);prin(head);choose(head);7.程序运行结果1h* 15 MtI Lr3lUh E 為 H X5 I J C* b- W 14 U 14 phy*丄bn 込门朗L F Chkntise ax li 12 B 1* 1 b- I
27、hntlc mk 1% 12 V i ? MLatey 1% M2课酬号iWti千比嘉上机弟町幸1ut hshiK佔14351ihit1、14M13*初I1514&2H14fihwlc*bM1513aioi5Ch 1mmm1413eitiHus 1C1512i1&1黑帯揖:宾铝 X.齐鞋I、倉铠慢改居信5为:总手时授時时可賢或上机学时学分开谭学期1vuithabx151412lielibx坤fl2513Ct*Sis14414ph 驴iFg 寧hx13JH112a1H6naficvxts12a157H isttiryv)c旳15K常人餾賽删除的课程蕭号1Q毬坯刖搏:溝按迫1车洁丸情按豆帕1 W雌性质皂学时攬慢学时实踐或上机啊学分1iwt 居bxli12EnllffhbK151总曲13上卄ZkZ1444phyj;hx活134*SChxx1412曲1W16Fhifilcxk1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学五年级数学小数乘除法竖式计算练习题
- 土方分包合同范本-合同范本
- 《美容项目专业知识》课件
- 《医院急诊科的管理》课件
- 届每日语文试题精练
- 更新采伐公路护路林许可申请表
- 《家用医疗用具使用》课件
- 金融产业电话理财顾问绩效总结
- 快递公司保安工作总结
- 医疗器械行业安全工作总结
- 江西省景德镇市2023-2024学年高二上学期1月期末质量检测数学试题 附答案
- 2024年办公楼卫生管理制度模版(3篇)
- 声光影的内心感动:电影视听语言学习通超星期末考试答案章节答案2024年
- 创新转化管理智慧树知到期末考试答案章节答案2024年山东大学
- 设备采购 投标方案(技术方案)
- 2023-2024学年四川省成都市锦江区四年级数学第一学期期末考试试题含答案
- 期中考试质量分析PPT.ppt
- 储罐受限空间作业方案DOC
- 压力容器耐压试验
- 课程设计---年产5.6万吨乙醇精馏塔的设计
- 冷轧辊激光毛化工艺简介
评论
0/150
提交评论