C语言课程设计学生选课系统.docx
- 文档编号:7513017
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:26
- 大小:128.18KB
C语言课程设计学生选课系统.docx
《C语言课程设计学生选课系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生选课系统.docx(26页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生选课系统
武汉理工大学华夏学院
课程设计报告书
课程名称:
C课程设计
题目:
学生选课系统程序设计
系名:
信息工程系
专业班级:
姓名:
学号:
指导教师:
成绩:
2016年3月4日
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
设计题目:
学生选课系统程序设计
初始条件:
学生选课系统能提供学生选课,以及学生和课程信息管理等一系列功能。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1、任务描述
假定有n门课程,每门课程有课程编号,课程名称,课程性质,学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于15)自由选课。
试设计一个选修课程系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)课程信息和学生选课信息录入功能(课程信息用文件保存)
(3)课程信息浏览功能
(4)查询功能
(5)按学分查询
(6)某门课程学生选修情况(可选项)
2、本课程涉及的知识点
变量的定义、输入和输出函数、结构体类型的定义、结构体数组、循环语句、选择语句,文件的操作等。
设计报告撰写格式要求:
一、课程设计说明书(或报告书)正文内容
【设计题目】例如:
学生选课系统
【开发环境】硬件环境:
微机系列,内存在1G以上,软件环境:
MicrosoftWindowsXP
【开发工具】MicrosoftVisualC++6.0
【完成时间】2016-2-29-----2016.3.4
【需求分析】分析阐述用户的需要以及要实现的程序应具有什么样的功能。
【系统总体设计】
在明确了所要解决的问题后,很自然地就要提出自己解决问题的思路和方案。
让读者了解方案的总体设计和关键技术。
要阐述自己的设计方案,说明为什么要选择或设计这样的方案。
具体包括:
系统总的设计思路,功能模块图;
使用的设计软硬件环境和开发技术和平台等。
【系统详细设计】
在这部分中,应该具有相关关键实现技术(如使用什么库函数,使用什么循环结构等)。
【系统调试和测试】
调试:
介绍设计过程中遇到的问题和解决方法。
测试:
介绍如何测试系统,测试中发现的问题和解决方案。
【结束语】
这部分篇幅不大,对整个设计中做的工作、获得的成果、心得体会等做一个简单小结。
【参考文献】罗列在设计过程中查阅的文献名称
注意:
参考文献罗列的格式为
资料编号?
作者姓名?
文献或期刊名称?
出版社名称,文献的出版时间或期刊的期号
例如:
文献[1]谭浩强.,C程序设计(第二版)[M],北京:
清华大学出版社,2001年
期刊[2]于振海.officeXP网上数据存取.计算机应用文摘[J],2003,24;69(页)
二、课程设计说明书(或报告书)正文的书写格式简介
一、正文标题层次正文题序层次是文章结构的框架,一般采用社会通用的论文书写形式。
即章条序码统一用阿拉伯数字表示,题序层次可以分为若干级,各级号码之间加小圆点,末尾一级的后面不加小圆点,层次分级一般不超过四级为宜,示例如下:
第一级(章)
1
2
3
……
第二级(条)
1.1
1.2…
2.1
2.2…
3.1
3.2…
……
第三级(条)
1.1.1
1.1.2…
1.2.1
1.2.2…
2.1.1
2.1.2…
2.2.1
2.2.2…
3.1.1
3.1.2…
3.2.1
3.2.2…
……
二、表格每个表格应有自己的表序与表题,表序与表题间空一格。
例如:
表1.1XXXX,且表题与表序应写在表格的上方正中处。
三、插图插图图面要整齐、美观,插图应与正文呼应,不能脱节。
每幅插图应有图序与图题,图序编号要连续,图序与图题间空一格且要放在插图下方居中处。
四、公式公式应另起一行写在稿纸的中央
时间安排:
周次
星期一
星期二
星期三
星期四
星期五
第2周
第1-4节
第3-4节
第1-4节
第1-2节
第1-4节
地点
现教221
现教221
现教221
现教221
现教221
课程设计考核及评分标准
1.系统完成任务:
50分
2.各种技术的综合应用:
10分
3、回答提问情况:
20分
4.设计报告:
20分
1设计题目
学生选课系统
2开发环境
2.1硬件环境
微机系列,内存在1G以上
2.2软件环境
Win7系统
3开发工具
MicrosoftVisualC++6.0
4完成时间
2016年2月29日—2016年3月4日
5需求分析
用户需求如下:
假定有n门课程,每门课程有课程编号,课程名称,课程性质,学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于15)自由选课。
试设计一个选修课程系统。
故此,经过分析后我觉得程序应该具有以下功能:
(1)系统以菜单方式工作
(2)课程信息和学生选课信息录入功能
(3)课程信息浏览功能
(4)查询功能
(5)按学分查询
6系统总体设计
系统由哪几个功能模块构成,给出功能模块图。
C中模块化的工具是函数根据上面的需求分析,可以将这个系统的设计分为如下六大模块。
选课模块、按学分查找模块、按编号查找模块、查看课程模块、查看选课情况模块、课程输入模块、完成选择模块。
模块图如下图1所示。
图1系统功能模块图
另外,程序用了两个结构体和五个全局变量N1,N2,kk1,kk2,kk3。
五个全局变量是用来控制输入数据的循环的。
两个结构体分别是课程信息结构体:
structcouse//课程信息结构体
{
intnum1;//课程编号
charname1[20];//课程名称
charxinzhi[30];//课程性质
intztime;//课程总学时
intstime;//授课学时
intshiyan;//实验学时
intscore;//学分
longintdate;//开学学期
intnelepeo;//课程已选人数
intMelepeo;//课程人数上限
structcouse*next;
};
和存储学生信息的结构体:
structstudent//学生信息结构体
{
intnum2;
charname2[20];
intnelenum[50];//已选课程编号
intnelen;//已选课程数量
structstudent*next;
};
voidMs()
{
for(kk1=0;kk1<1100;kk1++)
for(kk2=0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);
}
7系统详细设计
7.1系统主菜单
系统界面设计图包括六个选项,用户可根据自己的需求选择不同的选项。
系统界面设计图如图2所示。
图2系统界面设计图
系统模块图分为六大模块。
分别是录入课程信息模块,课程信息管理模块,录入学生信息模块,学生信息管理模块,学生选课模块和退出系统模块。
系统功能模块图如下图3所示。
图3系统功能模块图
图3主菜单设计模块图
当用户进入主菜单后,会显示有六个选项的界面,需要用户从1-6个选项中选择一个选项来进行操作,若所选数非1-6,则会退出系统。
系统主菜单流程图如图4所示。
定义n
N
Y
Y
图4系统总流程图
该程序实现代码如下。
intmain()//主函数
{
inti;
start:
printf("\n\t\t\t欢迎使用学生选课系统!
\n");
printf("\n");
printf("\t主菜单:
\n");
printf("\t*******************************************************\n");
printf("\t**\n");
printf("\t*1.录入课程信息*\n");
printf("\t*2.课程信息管理*\n");
printf("\t*3.录入学生信息*\n");
printf("\t*4.学生信息管理*\n");
printf("\t*5.学生选课*\n");
printf("\t*6.退出系统*\n");
printf("\t**\n");
printf("\t*******************************************************\n");
printf("\n请输入菜单选项(1~6):
");
scanf("%d",&i);
if(i<1||i>6)
{
printf("输入错误,请重输:
\n");
gotostart;
}
switch(i)
{
case1:
{
system("cls");
inputc();
gotostart;
break;
}
case2:
{
system("cls");
managementc();
gotostart;
break;
}
case3:
{
system("cls");
inputs();
gotostart;
break;
}
case4:
{
system("cls");
managements();
gotostart;
break;
}
case5:
{
system("cls");
elective();
gotostart;
break;
}
case6:
{
system("cls");
printf("感谢使用本系统!
\n\n再见!
\n");
}
}
return0;
}
7.2录入课程信息
录入课程信息有两个选项,录入课程和返回主菜单。
录入课程信息界面设计如图5所示。
图5录入课程信息界
当用户进入录入课程后,会有两个选项,录入课程和返回主菜单。
录入课程信息流程图如图6所示。
Y
N
N
Y
图6录入课程信息流程图
实现该功能代码如下。
voidkeyboardc()//录入课程子函数
{
structcouse*p1,*p2;
N1=0;
p1=p2=(structcouse*)malloc(sizeof(structcouse));
printf("课程编号课程名称课程性质总学时授课学时实验学时学分开课学期人数上限\n");
scanf("%d%s%s%d%d%d%d%d",&p1->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&p1->Melepeo);
p1->nelepeo=0;
head1=NULL;
while(p1->num1!
=0)
{
N1=N1+1;
if(N1==1)head1=p1;
elsep2->next=p1;
p2=p1;
p1=(structcouse*)malloc(sizeof(structcouse));
scanf("%d%s%s%d%d%d%d%d",&p1->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&p1->Melepeo);
p1->nelepeo=0;
}
p2->next=NULL;
}
voidinputc()//录入课程主函数
{
inti;
printf("\t\t\t录入课程信息\n");
printf("\n1.录入课程\n");
printf("2.返回主菜单\n");
printf("请选择(1~2):
\n");
scanf("%d",&i);
switch(i)
{
case
(1):
keyboardc();break;
case
(2):
break;
}
}
7.3课程管理
课程管理有三个选项,新增课程,删除课程和返回主菜单。
课程管理界面设计如图7所示。
图7课程管理界面
课程管理可以选择增添或删除课程,若输入课程格式错误会显示错误,用户需要重新输入程管理流程图如图8所示。
N
Y
图8课程管理流程图
实现该功能代码如下。
voiddelc(intnum1)//课程管理子函数(删除课程)
{
structcouse*p1,*p2;
if(head1==NULL)
{
printf("\n没有课程,无法删除!
\n");
gotoend;
}
p1=head1;
while(num1!
=p1->num1&&p1->next!
=NULL)
{
p2=p1;p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1)head1=p1->next;
elsep2->next=p1->next;
printf("已删除该编号课程!
\n");
N1=N1-1;
}
elseprintf("无该编号的课程!
\n");
end:
;
}
voidmanagementc()//课程管理主函数
{
structcouse*incouse;
inti,num1;
printf("\t\t\t课程信息管理\n");
printf("1.新增课程\n");
printf("2.删除课程\n");
printf("3.返回主菜单\n");
printf("请选择(1~3):
\n");
scanf("%d",&i);
switch(i)
{
case
(1):
{
incouse=(structcouse*)malloc(sizeof(structcouse));
printf("课程编号课程名称课程性质总学时授课学时实验学时学分开课学期人数上限\n");
scanf("%d\n%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n",&incouse->num1,&incouse->name1,&incouse->xinzhi,&incouse->ztime,&incouse->stime,&incouse->score,&incouse->date,&incouse->Melepeo);
incouse->nelepeo=0;
insertc(incouse);
break;
}
case
(2):
{
printf("请输入要删除课程的编号:
\n");
scanf("%d",&num1);
delc(num1);
break;
}
case(3):
break;
}
}
7.4学生信息管理
学生信息管理可选新增或删除学生信息,若都不操作则可选返回主菜单。
学生信息管理界面设计如图9所示。
图9学生信息管理界面
学生信息管理有增加和删除学生信息,若选择此项,则会提示用户输出入相关信息,若输入格式错误则会有提示错误信息,当操作完成后会退回主菜单界面。
学生信息管理界面流程图如图10所示。
N
Y
图10学生信息管理界面流程图
实现该功能代码如下。
voidinserts(structstudent*incouse)//学生信息管理子函数(填加学生信息)
{
structstudent*p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0->next=NULL;
}
else
{
while((p0->num2>p1->num2)&&(p1->next!
=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2<=p1->num2)
{
if(head2==p1)head2=p0;
elsep2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N2=N2+1;
}
voiddels(intnum2)//学生信息管理子函数(删除学生信息)
{
structstudent*p1,*p2;
if(head2==NULL)
{
printf("\n没有该学生信息,无法删除!
\n");
gotoend;
}
p1=head2;
while(num2!
=p1->num2&&p1->next!
=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head2)head2=p1->next;
elsep2->next=p1->next;
printf("已删除该学生信息!
\n");
N2=N2-1;
}
elseprintf("无该学号的学生!
\n");
end:
;
}
voidmanagements()//学生信息管理主函数
{
structstudent*incouse;
inti,num2;
printf("\t\t\t学生信息管理\n");
printf("1.新增学生信息\n");
printf("2.删除学生信息\n");
printf("3.返回主菜单\n");
printf("请选择(1~3):
\n");
scanf("%d",&i);
switch(i)
{
case
(1):
{
incouse=(structstudent*)malloc(sizeof(structstudent));
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):
break;
}
}
7.5学生选课
学生选课可以查询已选和可选课程,此外还有返回主菜单选项学生选课界面设计如图11所示。
图11学生选课界面
进入选课选项则会提示用户输入学号然后再进行选课。
若不选则可以退回主菜单。
学生选课流程图如图12所示。
Y
N
Y
N
N
Y
图12学生选课流程图
实现该功能代码如下。
选课程序如下。
用户要选课时,查询可选课程后会提示输入所要选的课程的编号,然后程序会根据所选的课程编号将所选课程信息储存。
voidelect(structstudent*s)//选课
{
structcouse*p;
intnum1,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)++;
}
voidcheak()//学生选课子函数(查询可选课程)
{
chare;
structcouse*c;
structstudent*s;
intnum2,i,j=0,t=0;
printf("请输入你的学号:
");
scanf("%d",&num2);
s=head2;
while(s->num2!
=num2&&s->next!
=NULL)s=s->next;
if(s->num2!
=num2)
{
printf("不存在你的信息,请进入主菜单录入你的信息!
\n");
gotoend;
}
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("%d\n",c->num1);
j++;
}
c=c->next;
}
if(j==0)
{
printf("你已选完所有课程,无法再多选!
\n");
gotoend;
}
printf("选课(y/n)?
:
\n");
getchar();
e=getchar();
i=0;
while(e=='y')
{
elect(s);
printf("继续选课(y/n)?
:
\n");
getchar();
e=getchar();
}
end:
;
}
退课程序如下。
首先输入要退掉课程的编号,若该课程存在,则显示退课成功,若不存在,则失败。
voidback(structstudent*p)//退课
{
structcouse*p1;
intnum1,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");
}
查询已选课程代码如下。
首先输入学号,若系统中无记录,则会提示不存在该信息,请用户录入该信息,然后用goto语句跳转到主菜单界面。
若有记录,则继续输入课程编号,若未选此课,则会提示你还没有选这个课程。
voidhcheak()//学生选课子函数(查询已选课程)
{
charc;
structcouse*p0;
structstudent*p;
intnum2,i,f=0;
printf(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 选课 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)