第一篇:2014_12_C语言课程设计内容和要求
《C语言程序设计》课程设计
----内容及要求
1、课程设计的目的
课程设计是C语言教学中一个重要的实践环节。通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力,提高学生利用C语言进行程序设计的能力,使学生掌握面向过程语言的结构化程序设计方法及解决实际问题的能力,培养学生的创新意识,并为学生今后学习面向对象的程序设计语言打下基础。在本课程设计的过程中,让学生系统地、综合地根据所学习的C语言相关知识,编写一个功能完善、实用性强,知识点覆盖面广的应用程序,让学生进一步熟悉C语言中标准函数的使用,用户定义函数及语句的编写及使用方法,进一步熟悉指针、链表、文件的使用方法。并借此过程让学生进一步掌握有关C语言程序调试的方法与技巧,形成一定的C语言编写能力。
2、课程设计的基本要求
(1)要求学生熟练掌握C语言的基本概念、基本数据类型、基本语句、函数、指针、结构体类型、链表的处理及其灵活应用,掌握C语言中文件的操作和使用方法;
(2)理清系统的总体框架,合理地划分系统的功能模块;(3)要求使用结构化程序设计方法和模块化思想编程;
(4)各模块单独编写程序代码,分别测试,最后整合各个模块的功能进行联合调试。各组中的同学之间开展讨论和协作、合理分工,认真完成课题;(5)必须实现系统的基本功能,完成课程设计规定的基本内容,达到基本要求;(6)可以自行对所给课题进行功能上的扩充或增加(7)在源程序中合理使用注释,使程序容易阅读和理解;(8)程序界面要求友好、直观、易操作;
(9)按时提交课程设计报告,报告内容具体要求见下文。
3、分组安排
以班级为单位,分组进行课程设计。原则上,每3人一组合作完成一个课程设计,每个人的任务不同。也可以一人单独完成一个课题(五个功能模块以上)。
各班自行组织分组,确定分组名单。每组抽签从老师所给的参考课题中选择课题,也可自拟课题,但选择自拟课题的分组之间的课题不能完全相同。
扬州大学信息工程学院
课程设计报告
课程名称 《C语言程序设计》 设计题目 学生姓名 班 级 学 号 指导老师
2014年12月
七、参考文献
列出主要的参考书、网址等。
八、附录
源程序清单,对代码中重要的地方用注释进行解释和说明
6、课程设计验收及考核评估要求
结合学生的动手能力、独立分析解决问题的能力和创新精神、课程设计报告和课程设计答辩考核的情况综合考评,考核成绩分优、良、中、及格和不及格五等。具体成绩评定参考:
• 学习态度(10%)• 选题(20%)– 题目难度 – 创新性
• 课程设计报告(30%)• 设计(40%)– 正确性 – 界面 – 算法思想 – 测试数据
考核时具体要求: 1)运行所设计的系统;
2)回答老师提出的有关问题;
3)提交课程设计报告;
4)以班级为单位提交电子版本材料(所有同学提交一个名为“学号”+“姓名”的文件夹,包含以下内容:源程序、可执行程序、课程设计报告电子版本、使用手册);
5)所完成课题内容有创新的酌情加分。
7、课程设计的题目参考
课题可从以下题目中选择,或者自拟,但自拟的课题各分组间不能完全相同。
题目一:学生成绩管理系统Ⅰ
设计和实现一个“学生成绩管理系统”,满足以下要求: 1.系统以菜单方式工作;
2.使用链表或结构数组对学生成绩进行管理和维护; 3.使用二进制文件在磁盘上保存学生记录信息;
4.链表中各结点或结构数组中各元素包括“学号、姓名、语文、数学、外语、平均分”基本字段; 5.实现如下基本功能:
(1)查看所有学生信息
(2)查找学生(查找指定学号的学生,显示该学生的学号、姓名、所有课程成绩)
(3)删除学生(删除指定学号的学生)(4)排序(按学号由小到大排序)
(5)添加学生记录(新增学生记录,将其添加到链表或结构数组中)(6)插入学生记录(在链表或结构数组已按学号有序的提下,将学生记录插其中合适的位置)
(7)计算平均分(计算每位学生每门课程的平均分)
(8)将学生记录保存到文件(将链表或结构数组中的数据以文件的形式存盘)
(9)从文件中读出学生记录(将已经存盘的文件读入内存,进行管理)
题目三:学生成绩记录薄
设计和实现一个“学生成绩记录薄”,满足以下要求: 1.系统以菜单方式工作;
2.使用链表或结构数组对不同班级的学生成绩信息进行管理和维护; 3.使用二进制文件在磁盘上保存学生记录信息;
4.链表中各结点或结构数组中各元素包括“学号、班级、姓名、语文、数学、外语、计算机、总分”字段; 5.实现如下基本功能:
(1)列出指定班级的所有学生的成绩单
(2)录入学生记录(新增学生的信息,将它添加到链表中)
(3)查找学生(查找指定学号的学生,显示该学生的学号、班级、姓名、所有课程成绩)
(4)删除学生(删除指定学号的学生)
(5)计算总分和平均分(计算每位学生四门课程的总分)(5)排序(对指定班级的所有学生按总分由高到低的方式排序并输出)(6)计算指定班级各门课程的平均分(计算并输出某班级学生每门课程的平均分)
(7)查询所有存在不及格课程的学生,并输出这些学生信息;(8)将学生记录保存到文件存盘(将链表或结构数组的数据以文件的形式存盘)
(9)从文件中读入学生记录(将原来已经存盘的文件读入内存,进行管理)
题目五:图书信息管理系统
设计和实现一个“图书信息管理系统”,满足以下要求: 1.系统以菜单方式工作;
2.使用链表或结构数组对图书信息进行管理和维护; 3.使用二进制文件在磁盘上保存图书记录信息;
4.链表中各结点或结构数组中各元素包括“图书编号、书名、作者、出版社、出版时间、价格”基本字段; 5.实现如下基本功能:
(1)图书信息录入功能
(2)图书信息浏览功能(输出所有的图书信息)
(3)图书信息排序(按图书编号由大到小的顺序排列)(4)图书信息查询(按图书编号和作者两种方式查询图书信息)(5)图书信息统计(按出版社统计满足条件的图书数目,并显示图书信息)
(6)图书删除(删除指定编号的图书)
(7)图书修改(修改指定编号的图书的基本信息)
(8)将图书信息保存到文件存盘(将链表或结构数组的数据以文件的形式存盘)
(9)从文件中读入图书信息(将原来已经存盘的文件读入内存,进行管理)
1题目七:DVD影片管理系统
设计和实现一个“DVD影片管理系统”,并满足以下要求: 1.系统以菜单方式工作;
2.使用链表或结构数组对DVD影片信息进行管理和维护; 3.使用二进制文件在磁盘上保存通信录信息;
4.链表中各结点或结构数组中各元素包括的DVD影片信息:DVD影片编号、DVD影片名称、地区类型(如港台、大陆、欧美、韩国、日本等)、内容类型(如战争、喜剧、言情、动漫等等)、价格、出版日期 5.实现如下基本功能:
(1)新增DVD影片
(2)DVD影片浏览(输出所有的DVD影片信息)(3)DVD影片删除(删除指定编号的影片)(4)DVD影片修改(修改指定编号的影片信息)(5)DVD影片排序(根据影片编号进行排序)
(6)DVD影片查询统计(提供按地区类型、内容类型两种方式对影片进行统计查询功能)
(7)将DVD影片数据保存到文件存盘(将链表或结构数组中的数据以文件的形式存盘)
(8)从文件中读入DVD影片数据(将已存盘的文件读入内存,进行管理)
第二篇:C语言课程设计要求及参考题目
《程序设计课程设计》要求及参考题目
一、目的:
本次课程设计是《程序设计基础》课程的综合实验,作为课堂教学和课内正常上机实验的补充。
通过对《程序设计基础》课程的学习,学生已初步掌握C语言的基本概念、结构化程序设计的基本方法,但是实际编程和上机调试程序的能力还远远不足。通过《程序设计课程设计》,加强学生自主学习、收集资料和动手编程的能力,为后续专业课程打好基础。
二、实验安排:
课程设计内容和要求的安排与讲解在课内时间进行。
上机机时安排:共一周,除周三下午外,每天全天在机房上机,不足部分自行安排。
三、课程设计说明:
本次课程设计平台使用
每人一题。
本次课程设计要求每个程序要调试通过;课程设计结束后,每人提交课程设计成果如下:
程序一套,要求演示,演示时采用答辩形式,同学边演示
边讲解编程思路。
课程设计报告一份,报告中可不包括源代码。
源代码以提交的源代码要求加注释。(以
附件的形式提交至wtwbylw@163.com,每人一个文件夹,文件夹命名方式为:班级_学号_姓名,以班级为单位打包发
送至邮箱)
四、评分标准
根据平时上机考勤;注重平时上机情况,教师要不定期检查学
生进度,学生不得以自己有私人电脑为借口而不来上机。
根据程序运行结果;
根据《程序设计课程设计报告》,学生能对教师的提问熟练地解
释清楚。
五、参考题目
要求:
1.编写程序,实现某信息处理的过程。数据在程序中用数组、结构体或共用体中的至少一种形式表示。程序从键盘或文件输入,将处理结果存储在文件中。
2.题目要有实际应用背景,例如:简单计算器,字符串比较函数。
3.编写的代码要有一定规模,至少200行,完成至少3项子功能(函数)。
4.周一上午确定题目,题目定后,不得随意修改。
选题一:学生信息管理系统设计
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:
(1)学生信息录入功能(学生信息用文件保存)---输入
(2)学生信息浏览功能---输出
(3)查询、排序功能---算法
1)按学号查询
2)按姓名查询
(4)学生信息的删除与修改
选题二:通信录
编写一个通信录管理程序,要求通信录中包括姓名,通信地址,邮政编码和联系电话。功能:
(1)显示通信录的所有信息。
(2)程序中可以对通信录进行添加
(3)可以删除已有的信息
(4)根据姓名或者联系电话(2个都能实现),可以查找该条记录。
选题三:学生成绩记录簿设计
编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能:
(1)创建一个文本文件用来记录学生信息,输入至少30名学生的信息,保存在文本文件中;
(2)将文本文件中的数据读出,按学号或姓名查询成绩;
(3)能添加成绩记录;
(4)能修改指定姓名或学号的学生的成绩;
(5)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息,显示及格率和平均分,显示最高分和最低分,显示所有学生的排名(不能改变学生的学号顺序);
(6)以上信息能保存在原文本文件中。
选题四:学生选修课程系统设计
假定有n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能:
1、系统以菜单方式工作
2、课程信息录入功能(课程信息用文件保存)--输入
3、课程信息浏览功能--输出
4、课程信息查询功能--算法
查询方式
按学分查询
按课程性质查询
5、学生选修课程(可选项)
选题五:职工工作量统计系统设计
编写一个程序,该程序能输入职工工号和完成的产品数量,程序允许同一职工有多次输入,由程序对其完成的产品数量实现累计。程序按完成数量对他们排序,并确定他们的名次。按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。要求程序用有序链表存储数据信息。
选题六:单项选择题标准化考试系统设计
一、功能要求:
1、用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案)
2、试题录入:可随时增加试题到试题库中
3、试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)
4、答题:用户可实现输入自己的答案
5、自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
选题七:职工信息管理系统设计
职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:
1、职工信息录入功能(职工信息用文件保存)--输入
2、职工信息浏览功能--输出
3、职工信息查询功能--算法
查询方式
按学历查询等
按职工号查询等
4、职工信息删除、修改功能(可选项)
选题八:机房收费管理系统
(1)输入功能:输入若干名学生的学号、班级、姓名、开始上机时间和结束上机时间。
(2)计算功能:计算每个学生的上机费用(计算公式:上机费用=(结束上机时间-开始上机时间)*收费标准,(以分钟为单位))
(3)修改功能:修改学生上机的个人档案(如:增添或删除)
(4)查询功能:按条件(班级、学号、姓名)查询学生上机信息,并能显示查询学生的相应全部档案。
选题九:校际运动会管理系统
初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数
各项目名次取法有如下几种:
取前5名:第1名得分7,第2名得分5,第3名得分3,第4名得分2,第5名得分1;
取前3名:第1名得分5,第2名得分3,第3名得分2;
用户自定义:各名次权值由用户指定。
2.由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。
3.所有信息记录完毕后,用户可以查询各个学校的比赛成绩,生成团体总分报表,查看参赛学校信息和比赛项目信息等。
第三篇:C语言课程设计
C语言课程设计
飞机空战小游戏
一、实验环境
运行系统 WINDOWSXP 编程工具C++6.0 地点 程序设计与仿真实验室
桌号19电脑IP地址221.12.10.218
二、实验目的和要求 实验目的:
(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作算法。
(2)使学生进一步掌握程序设计、编写、调试能力。(3)使学生了解软件开发的基本步骤和内容。
实验要求::飞机空战小游戏。功能要求:
1)有主菜单界面,能让用户选择开始、退出、难度等级、查看用户积分功能;
2)飞机能通过A、S、D、W或上下左右键控制移动方向,使用空格键发射子弹;
3)屏幕随机出现从上到下的敌方子弹; 4)当打中敌方子弹时,积分加1;
5)当敌方子弹打正飞机时,游戏结束,并提示用户是否保存记录(记录包括用户名及积分值),保存后退回到主菜单;
6)当选择主菜单中的“查看用户积分”选项时,进入第二级菜单,用户可查看全部用户积分记录,也可仅查看积分最高者,也可根据用户输入的用户名查看;(此处要求使用到链表,用于临时存储用户积分数据);(对链表的查找操作)
7)所有用户积分信息使用文件进行永久性保存; 8)用户选择“难度等级”,可设定游戏不同难度,难度越高,出现敌方子弹数目及间隔将增加。
三、实验内容和结果
系统总体设计:编写出c语言代码,运行程序,并调试程序,最终实现游戏的功能。本程序主要包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,包含了不同的功能,对原来的程序作出了很大的改进,用到的主要语句有if语句,for语句、while语句、printf语句、switch语句等等,添加了颜色函数。
系统模块设计:包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,其中是否继续游戏函数,菜单函数主要运用了SWITCH语句和If语句,子弹移动函数,敌机移动函数通过数组内各数值的变化来完成,设置函数主要用PRINTF和SCANF语句进行各项数值的设置,游戏控制函数使用if函数,kbhit()函数,switch函数组合控制数组中飞机进行的移动和图案的变换。最后用打印数组的方式打印出数组变换。最后运用SWITCH函数进行各项菜单内容的操作。
实验的测试和结果:
四、实验中的问题及心得
通过本次试验,使我对c语言有了更深一层次的了解,对for语句、while语句、printf语句、switch语句、颜色函数等等的了解及使用更加详细了一些,明白了这些语句的用法,明确了c语言的使用环境,功能。同时我了解到了一些方法来实现一些C语言作为一个基础性编程语言是我们在以后编程中不可或缺的语言,使用率肯定会进一步增高。掌握了c语言就相当于掌握了一门技术,同时c语言相对而言简单一些,更容易理解。自己虽然对这个小游戏进行一部分的改造,但是我也感觉这只是其中的很很小的一部分,肯定会有更加强大的功能等待着我们去改善。
同时,我也发现了自己很多的不足,需要进一步加强这一方面的学习,在数据结构链表的使用上还很欠缺,无法使用链表进行数据的读取和输入,还有在两个程序的连接上还有困难,对于头文件的理解不到位,链表的结构,定义,使用指针的方式„„这些都需要提高。这些技能的欠缺导致了在 这个小游戏中无法顺利完成有关用户名和记录的一些要求。„„
附录:程序清单
#include
void movebul(int [][N]);//子弹移动函数 void movepla(int [][N]);//敌机移动函数 void setting(void);//设置函数 void menu();//菜单 int scr[50][N]={0},pl=9,width=15,speed=16,density=40,score=0,death=0,length=18,y=0,x=5,z=15,life=1,max=0;//全局变量:界面、我机初始位、界面宽度、敌机速度、敌机密度、得分、死亡,子弹,飞机,敌机初始图案,生命
char name[N];char first[N];void main(){ menu();getch();}
void print(int a[][N])//输出函数 { int i,j;system(“cls”);for(i=0;i a[i][width-1]=4; for(j=0;j { if(a[i][j]==0)printf(“ ”); if((a[i][j]==1)&&(x<15))printf(“%c”,x);//输出我机的符号 if((a[i][j]==2)&&(z<35))printf(“%c”,z);//子弹 if((a[i][j]==3)&&(y<4))printf(“%c”,y+1);//输出敌机符号 if(i==1&&j==width-1)printf(“总积分:%d”,score);//显示得分 if(i==2&&j==width-1)printf(“已经死亡了%d 次,剩余 %d 条命”,death,life-death);//右上角显示死亡次数 if(i==3&&j==width-1)printf(“普通按键:AD控制左右飞行”); if(i==4&&j==width-1)printf(“ W 发射子弹”);if(i==5&&j==width-1)printf(“特殊按键:+-号加减敌机速度”);if(i==6&&j==width-1)printf(“ /*号单列敌机密度减小增大(均有限制)”); if(i==7&&j==width-1)printf(“VIP按键:X键变化飞机图案,Y键变化敌机图案”); if(i==8&&j==width-1)printf(“tZ键变化子弹图案,P键增加生命(均有限制)”); if(i==9&&j==width-1)printf(“注意:向下移动后按其他方向键飞机显现”); } printf(“n”);} } void movebul(int a[][N]){ int i,j;for(i=0;i { if(i==0&&a[i][j]==2) a[i][j]=0; if(a[i][j]==2) { if(a[i-1][j]==3)//加分 { score+=1; printf(“7”); } a[i][j]=0,a[i-1][j]=2; } } } void movepla(int a[][N]){ int i,j;for(i=length-1;i>=0;i--)//从最后一行往上是为了避免把敌机直接冲出数组。 for(j=0;j if(i==length-1&&a[i][j]==3) a[i][j]=0;//消除敌机,在最低层 if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;//敌机移动 } if(a[length-2][pl]==3&&a[length-1][pl]==1)death++;//死亡 } void continuegame()//继续游戏 { printf(“用户%s”,name);printf(“你的得分是%dn”,score);if(score==0)printf(“tttt 恭喜你刷新了最低记录na”,score);if((score>0)&&(score<20)) printf(“tttt 回家再练 练吧na”,score);if(score>19) printf(“tttt 你真厉害 na”,score);printf(“游戏结束n”);printf(“按y键继续游戏,空格键退出游戏(y/n)?n”);printf(“ttt”);switch(getch())//是否要继续游戏 { case 'y': case 'Y':system(“cls”),death=0,score=0,life=1,x=5,y=0,z=15;menu();break;} } void setting(void)//设置函数 { system(“cls”);//清屏 printf(“n 输入游戏界面的大小(默认3):1-10 ”);scanf(“%d”,&width);width=(width+1)*5;printf(“n 请输入敌机密度大小(默认3):1-5 ”);scanf(“%d”,&density);density=(7-density)*10;printf(“n 输入敌机的飞行速度大小(默认3):1-10 ”);scanf(“%d”,&speed);speed=(11-speed)*2;printf(“n 输入我机的生命(默认1):1-100 ”);scanf(“%d”,&life);printf(“n 输入飞机的图案(默认1):1-2 ”);scanf(“%d”,&x);x=x+4;printf(“n 输入子弹的图案(默认1):1-10 ”);scanf(“%d”,&z);z=z+14;printf(“n 输入敌机的图案(默认1):1-3 ”);scanf(“%d”,&y);y=y-1;} void run(){ int i=0,j=0,k=0,b=0;printf(“请输入用户名:”);scanf(“%s”,name);printf(“您的用户名是:%s”,name);if(getch()==27)setting();printf(“游戏说明:按AWSD控制我机左右飞行,空格键发射子弹n特殊按键:-号敌机减速,+号敌机加速n特殊按键:/号单列敌机密度减小,*号单列敌机密度增大n”);printf(“VIP按键:X键变化飞机图案,Y键变化敌机图案ntZ键变化子弹图案,P键增加生命n”);printf(“任意键开始游戏,esc键进入游戏设置n”);printf(“游戏时也可更改游戏设置任意键开始nn”);system(“color a”);//设置背景颜色 if(getch()==27)setting();scr[length-1][pl]=1;//我方飞机初始位置 scr[0][5]=3;while(death { if(kbhit()) switch(getch())//控制设置按键 { case 'a': case 'A':if(pl>0) scr[length-1][pl]=0,scr[length-1][--pl]=1;break; case 'd': case 'D':if(pl scr[length-1][pl]=0,scr[length-1][++pl]=1;break;case 'W': case 'w':if(length>10) { scr[length-1][pl]=0,scr[length-2][pl]=1; length=length-1; };break; case '+':if(speed>2) { speed=speed-2; };break; case '-':speed=speed+1;break;case '*':if(density>5) { density=density-5; };break; case '/':density=density+10;break; case 'l':if(width<40) { width=width+2; };break; case 's':if(length<30) { scr[length-1][pl]=0; length=length+1; scr[length-1][pl]='5'; };break; case ' ':scr[length-2][pl]=2;break; case 'y':y=(y+1)%4;break; case 'x':x=(x)%2+5;break; case 'z':if(z<25) { z=z+1; } else z=15;break; case 'p':life=life+1;break;} if(++j%density==0)//控制生产敌机的速度 { j=0; srand(time(NULL));//产生随机数 scr[0][rand()%width]=3; scr[rand()%3][rand()%(width+2)]=3; scr[rand()%2][rand()%(width+1)]=3; scr[rand()%4][rand()%(width+4)]=3;//生成随机敌方飞机 } if(++i%speed==0)//控制敌机移动速度,相对于子弹移动速度 movepla(scr);//飞机移动 movebul(scr);//子弹移动 print(scr);//绘制游戏画面 } if(score>=max){ max=score; for(i=0;i { name[i]=first[i]; } } if(score score=score;} continuegame();getch();} void menu(){ printf(“n1:游戏设置n2:游戏说明n3:开始游戏n4:查看用户信息n5:退出游戏n”); switch(getch()){ case '1': setting();menu();break; case '2':printf(“游戏说明:按AWSD控制我机左右飞行,空格键发射子弹n特殊按键:-号敌机减速,+号敌机加速n特殊按键:/号单列敌机密度减小,*号单列敌机密度增大n”);printf(“VIP按键:X键变化飞机图案,Y键变化敌机图案ntZ键变化子弹图案,P键增加生命n”);printf(“ 任意键开始游戏,esc键进入游戏设置n”);printf(“ 游戏时也可更改游戏设置”);menu();break; case '3':run();menu();break; case '4':seerecord();menu();break; case '5':exit(0);break;default:menu();break;} } seerecord(){ printf(“最高纪录为%s,%d”,first[N],max);} C语言程序设计课程设计 设计题目:专业:计算机科学与技术班级:2010级计算机二班组长姓名:马得才【P101712944】成员姓名:孙丽欣【P101712927】 赵广峰【P101712926】 迟成凯【P101712928】 冶成意【P101712930】 2010年5月20日 题目: 指导教师:普措才仁 一、案例需求 二、案例分析 三、案例设计 四、案例实现 五、参考文献 #include int num1; char name1[20]; int score; int nelepeo;//课程已选人数 int Melepeo;//课程人数上限 struct couse * next;}; int student(); //学生登陆 int teacher(); //教师登陆 struct student//学生信息结构体 { int num2; char name2[20]; int nelenum[50];//已选课程编号 int nelen;//已选课程数量 struct student * next;}; void Ms(){ for(kk1=0;kk1<1100;kk1++) for(kk2=0;kk2<1200;kk2++) for(kk3=0;kk3<1200;kk3++);} void keyboardc()//录入课程子函数(从键盘录入){ void intoc();struct couse *p1,*p2;N1=0;p1=p2=(struct couse*)malloc(sizeof(struct couse));printf(“n课程编号:”);fflush(stdin);scanf(“%d”,&p1->num1);printf(“n课程名称:”);scanf(“%s”,p1->name1);printf(“n学分:”);scanf(“%d”,&p1->score);printf(“n课程人数上限:”);scanf(“%d” ,&p1->Melepeo);printf(“ntttt输入成功!”);p1->nelepeo=0;head1=NULL;while(p1->num1!=0){ N1=N1+1; if(N1==1)head1=p1; else p2->next=p1; p2=p1; p1=(struct couse *)malloc(sizeof(struct couse)); printf(“n-----------------------------”); printf(“n课程编号:(输入0结束)”);scanf(“%d”,&p1->num1);printf(“n课程名称:”);scanf(“%s”,p1->name1);printf(“n学分:”);scanf(“%d”,&p1->score);printf(“n课程人数上限:”);scanf(“%d” ,&p1->Melepeo); p1->nelepeo=0; printf(“ntttt输入成功!”);} p2->next=NULL;intoc();} void filec()//录入键盘子函数(从文件录入){ void intoc(); FILE * fp; char filepath[20]; struct couse *p1,*p2; N1=0; printf(“输入要读入的文件路径:”); getchar(); gets(filepath); if((fp=fopen(filepath,“r”))==NULL) { printf(“找不到%s文件!n”,filepath); exit(0); } p1=p2=(struct couse*)malloc(sizeof(struct couse)); fscanf(fp,“%d%s%d%d%d”,&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo); head1=NULL; while(!feof(fp)) { N1=N1+1; if(N1==1)head1=p1; else p2->next=p1; p2=p1; p1=(struct couse *)malloc(sizeof(struct couse)); fscanf(fp,“%d%s%d%d%d”,&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo); } p2->next=NULL; intoc();} void inputc()//录入课程主函数 { int i; printf(“ttt录入课程信息n”); printf(“n1.从键盘录入n”); printf(“2.从文件录入n”); printf(“3.返回主菜单n”); printf(“请选择(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):keyboardc();break; case(2):filec();break; case(3):system(“cls”);return;break; //return } } void insertc(struct couse *incouse)//课程管理子函数(增加课程){ void intoc(); struct couse *p0,*p1,*p2; p1=head1; p0=incouse; if(head1==NULL) { head1=p0; p0->next=NULL; } else { while((p0->num1 > p1->num1)&&(p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p0->num1 <= p1->num1) { if(head1==p1)head1=p0; else p2->next=p0; p0->next=p1; } else { p1->next=p0; p0->next=NULL; } } N1=N1+1; intoc();} void delc(int num1)//课程管理子函数(删除课程){ void intoc(); struct couse *p1,*p2; if(head1==NULL) { printf(“n没有课程,无法删除!n”); goto end; } p1=head1; while(num1!=p1->num1 && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num1==p1->num1) { if(p1==head1)head1=p1->next; else p2->next=p1->next; printf(“已删除该编号课程!n”); N1=N1-1; } else printf(“无该编号的课程!n”); end:; intoc();} void managementc()//课程管理主函数 { struct couse * incouse; struct couse *p1; int i,num1; printf(“ttt课程管理n”); printf(“1.新增课程n”); printf(“2.删除课程n”); printf(“3.返回主菜单n”); printf(“请选择(1~3):n”); scanf(“%d”,&i); switch(i) { case(1): { incouse=(struct couse *)malloc(sizeof(struct couse)); printf(“n课程编号:”); fflush(stdin); scanf(“%d”,&p1->num1); printf(“n课程名称:”); scanf(“%s”,p1->name1); printf(“n学分:”); scanf(“%d”,&p1->score); printf(“n课程人数上限:”); scanf(“%d” ,&p1->Melepeo); printf(“ntttt输入成功!”); incouse->nelepeo=0; insertc(incouse); break; } case(2): { printf(“请输入要删除课程的编号:n”); scanf(“%d”,&num1); delc(num1); break; } case(3):system(“cls”);return;break; } } void keyboards()//录入学生信息子函数(从键盘录入){ void intos(); int i; struct student *p1,*p2; N2=0; p1=p2=(struct student *)malloc(sizeof(struct student)); printf(“n学生学号:”); scanf(“%d”,&p1->num2); printf(“n学生姓名:”); scanf(“%s”,p1->name2); p1->nelen=0; for(i=0;i<50;i++)p1->nelenum[i]=0; head3=NULL; while(p1->num2!=0) { N2=N2+1; if(N2==1)head3=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(sizeof(struct student)); //return printf(“n学生学号:(输入0结束!)”); scanf(“%d”,&p1->num2); printf(“n学生姓名:”); scanf(“%s”,p1->name2); p1->nelen=0; for(i=0;i<50;i++)p1->nelenum[i]=0; } p2->next=NULL; intos();return;} void files()//录入学生信息子函数(从文件录入){ int i=0; FILE * fp; char filepath[20]; struct student *p1,*p2; N2=0; printf(“输入要读入的文件路径:”); getchar(); gets(filepath); if((fp=fopen(filepath,“r”))==NULL) { printf(“找不到%s文件!n”,filepath); exit(0); } p1=p2=(struct student*)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); head3=NULL; while(!feof(fp)) { i=0; N2=N2+1; if(N2==1)head3=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); } p2->next=NULL;} void inputs()//录入学生信息主函数 { int i; printf(“nttt录入学生信息n”); printf(“n1.从键盘录入n”); printf(“2.从文件录入n”); printf(“3.返回主菜单n”); printf(“请选择(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):keyboards();break; case(2):files();break; case(3):system(“cls”);return;break; } return 0;} void inserts(struct student * incouse)//学生信息管理子函数(填加学生信息){ void intos(); struct student *p0,*p1,*p2; p1=head3; p0=incouse; if(head3==NULL) { head3=p0; p0->next=NULL; } else { while((p0->num2 > p1->num2)&&(p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p0->num2 <= p1->num2) { if(head3==p1)head3=p0; else p2->next=p0; p0->next=p1; } else { //return p1->next=p0; p0->next=NULL; } } N2=N2+1; intos();} void dels(int num2)//学生信息管理子函数(删除学生信息){ void intos(); struct student *p1,*p2; if(head3==NULL) { printf(“n没有该学生信息,无法删除!n”); goto end; } p1=head3; while(num2!=p1->num2 && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num2==p1->num2) { if(p1==head3)head3=p1->next; else p2->next=p1->next; printf(“已删除该学生信息!n”); N2=N2-1; } else printf(“无该学号的学生!n”); intos(); end:;} void managements()//学生信息管理主函数 { struct student * incouse; int i,num2; printf(“ttt学生信息管理n”); printf(“1.新增学生信息n”); printf(“2.删除学生信息n”); printf(“3.返回主菜单n”); printf(“请选择(1~3):n”); scanf(“%d”,&i); switch(i) { case(1): { incouse=(struct student *)malloc(sizeof(struct student)); incouse->nelen=0; incouse->nelenum[0]=0; printf(“学生学号t学生姓名n”); scanf(“%d%s”,&incouse->num2,incouse->name2); inserts(incouse); break; } case(2): { printf(“请输入要删除学生的学号:n”); scanf(“%d”,&num2); dels(num2); break; } case(3):system(“cls”);return;break; //return } } void elect(struct student * s)//选课 { void intos(); struct couse * p; int num1,i; printf(“请输入要选课的编号:n”); scanf(“%d”,&num1); for(i=0;s->nelenum[i]!=0;i++); s->nelenum[i]=num1; (s->nelen)++; p=head1; while(p->num1!=num1)p=p->next; (p->nelepeo)++; intos();} void cheak()//学生选课子函数(查询可选课程){ char e; struct couse * c; struct student * s; int num2,i,j=0,t=0; printf(“请输入你的学号:”); scanf(“%d”,&num2); s=head3; while((s->num2!=num2)&&(s->next!=NULL))s=s->next; if(s->num2!=num2) { printf(“不存在你的信息,请进入主菜单录入你的信息!n”); goto end; } c=head1; printf(“你的可选课程编号:n”); while(c!=NULL) { for(t=0,i=0;s->nelenum[i]!=0;i++) { if(c->num1==s->nelenum[i])t=1; } if(t==0 &&(c->nelepeo!=c->Melepeo)) { printf(“%dn”,c->num1); j++; } c=c->next; } if(j==0) { printf(“你已选完所有课程,无法再多选!n”); goto end; } printf(“选课(y/n)?:n”); getchar(); e=getchar(); i=0; while((e=='y')||(e=='Y')) { elect(s); printf(“继续选课(y/n)?:n”); getchar(); e=getchar(); } end:;} void back(struct student * p)//退课 { void intos(); struct couse * p1; int num1,i,j; printf(“请输入你要退掉的课程编号:n”); scanf(“%d”,&num1); p1=head1; while(p1->num1!=num1)p1=p1->next; for(i=0;p->nelenum[i]!=num1;i++); for(j=i;p->nelenum[j]!=0;j++)p->nelenum[j]=p->nelenum[j+1]; p->nelenum[--j]=0; (p1->nelepeo)--; printf(“退课成功!n”); intos();} void hcheak()//学生选课子函数(查询已选课程){ char c; struct couse * p0; struct student * p; int num2,i,f=0; printf(“请输入学号:n”); scanf(“%d”,&num2); p=head3; while(p->num2!=num2 && p!=NULL)p=p->next; if(p==NULL) { printf(“不存在你的信息,请回主菜单录入信息:n”); goto end; } printf(“已选课程编号:n”); if(p->nelenum[0]==0) { printf(“你还没选课!n”); goto end; } for(i=0;p->nelenum[i]!=0;i++) { printf(“%dn”,p->nelenum[i]); p0=head1; while(p0->num1!=p->nelenum[i])p0=p0->next; f=f+p0->score; } printf(“总学分:%dn”,f); printf(“是否进行退课(y/n)?”); getchar(); c=getchar(); while((c=='y')||(c=='Y')) { back(p); printf(“继续退课(y/n)?”); getchar(); c=getchar(); (p->nelen)--; } end:;} void elective()//学生选课主函数 { int i; printf(“ttt学生选课n”); printf(“1.查询可选课程n”); printf(“2.查询已选课程n”); printf(“3.返回主菜单n”); printf(“请输入(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):cheak();break; case(2):hcheak();break; case(3): system(“cls”);return;break; // return } } void listc()//输出课程信息 { struct couse * p; p=head1; printf(“课程编号 课程名称 学分 课程已选人数 课程人数上限n”); while(p!=NULL) { printf(“%-8d%10s%6d%8d%12dn”,p->num1,p->name1,p->score,p->nelepeo,p->Melepeo); p=p->next; } } void lists()//输出学生信息 { struct student * p; p=head3; printf(“学生学号 学生姓名 已选课程数量n”); while(p!=NULL) { printf(“%-4d %10s %6dn”,p->num2,p->name2,p->nelen); p=p->next; } } void intoc()//存储课程信息 { FILE * fp; struct couse * p; char filepath[30]; if((fp=fopen(“课程信息.dat”,“a+”))==NULL) { printf(“n保存失败!”); exit(0); } p=head1; while(p!=NULL) { fprintf(fp,“%d %s %d %d %dn”,p->num1,p->name1,p->score,p->nelepeo,p->Melepeo); p=p->next; } fclose(fp); printf(“课程信息已保存成功!n”);} void intos()//存储学生信息 { int i; FILE * fp; struct student * p; char filepath[30]; if((fp=fopen(“学生信息.dat”,“a+”))==NULL) { printf(“n保存失败!”); exit(0); } p=head3; while(p!=NULL) { fwrite(p,sizeof(struct student),1,fp); p=p->next; } fclose(fp); printf(“学生信息已保存成功!n”); printf(“ntttt选择菜单:”); printf(“ntttt1.继续添加ntttt2.返回主菜单:”); printf(“请选择:”); scanf(“%d”,&i); switch(i) { case 1:inputs();break; case 2:teacher();break; default:printf(“n输入有误!n”);} } void store()//信息主函数 { int i; printf(“tt系统信息查看及存储n”); printf(“1.查看课程信息n”); printf(“2.查看学生信息n”); printf(“3.返回主菜单n”); printf(“请输入(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):listc();break; case(2):lists();break; case(3):system(“cls”);return;break; } } int main()//主函数 //retuen { int i; FILE *fp; printf(“nttt欢迎使用学生选课系统!n”); printf(“n请选择菜单:”); printf(“ntttt1.教师登陆ntttt2.学生登陆n”); printf(“请选择:”); scanf(“%d”,&i); switch(i) { case 1:teacher();break; case 2:student();break; default:printf(“输入有误!”); } } int student() { int i; printf(“ntttt1.学生选课n”); printf(“ntttt2.系统信息查看及存储n”); printf(“ntttt3.退出系统n”); printf(“请选择:”); scanf(“%d”,&i); switch(i) { case 1: { system(“cls”); elective(); break; } case 2: { system(“cls”); store(); break; } default:printf(“输入有误!”); } } int teacher() { FILE *fp; int i; printf(“菜单:n”); printf(“1.录入课程信息n”); printf(“2.课程管理n”); printf(“3.录入学生信息n”); printf(“4.学生信息管理n”); printf(“5.系统信息查看n”); printf(“6.退出系统n”); if((fp=fopen(“课程信息.dat”,“rb”))==NULL) { printf(“n打开系统文件失败! n”); //fp=fopen(“信息.dat”,“rb”)); // } // if(feof(fp)) // { printf(“n还未添加课程信息,请添加课程信息!n”); inputc(); } while(!feof(fp)) { emp1=(struct couse*)malloc(sizeof(struct couse)); if(emp1==NULL) { printf(“n分配内存失败!n”); return; } fread(emp1,sizeof(struct couse),1,fp); if(feof(fp))break; if(head1==NULL) { head1=emp1; head2=emp1; } else{ head2->next=emp1; head2=emp1; } head2->next=NULL; } fclose(fp); fp==NULL; if((fp=fopen(“学生信息.dat”,“rb”))==NULL) printf(“n打开系统文件失败!n”); // //if(feof(fp)==1) // { printf(“还未添加学生信息,请添加学生信息!”); inputs(); while(!feof(fp)) { emp1=(struct student*)malloc(sizeof(struct student)); if(emp2==NULL) { printf(“n分配内存失败!n”); return; } fread(emp2,sizeof(struct student),1,fp); if(feof(fp))break; if(head3==NULL) { head3=emp2; head4=emp2; } else{ head4->next=emp2; head4=emp2; } head4->next=NULL; } fclose(fp); fp==NULL; printf(“n请输入菜单选项(1~6):n”); scanf(“%d”,&i); switch(i) { case(1): { system(“cls”); inputc(); break; } case(2): { system(“cls”); managementc(); break; } case(3): { system(“cls”); inputs(); break; } case(4): { system(“cls”); managements(); break; } case(5): { system(“cls”); store(); break; } case(6): { system(“cls”); printf(“感谢使用本系统!nn再见!n”); } } return 1; }第四篇:C语言课程设计范文
第五篇:C语言课程设计