c语言设计课程设计学生选修课程系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目一、学生选课治理系统
目录
第一部份:课程设计名称、目的、要求
名称:学生选修课程系统设计
目的:运用C语言提高解决实际问题的能力
实验环境:Microsoft Visual C++
内容:
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,讲课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。
【功能】
系统以菜单方式工作
课程信息录入功能(课程信息用文件保留)--输入
课程信息阅读功能--输出
查询功能:(至少一种查询方式)--算法
按学分查询
按课程性质查询
学生选修课程(可选项)
第二部份:程序整体设计思路
由于C语言是面对进程的语言,故我的设计思路是依照目标程序运行的进程来编写的。
具体的设计思路如下:
程序的要求是设计学生选修课治理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。
第一,考虑到程序的数据输入,能够设置一个治理员登岸选项,通过该选项进入治理员界面,进行选修课的录入和修改操作,最后将录入的课程保留到相应的文件中。
然后概念各类函数的功能包括查看,查询,删除等。
另一个为学生登岸界面,该界面学生能够进行课程选择和阅读查询等操作。
在进行该操作之前需要对治理员保留的文件进行读取,然后对其中的内容进行查询等,在学生选好课程以后,能够将其选好的课程保留于相应的文件中,以便下次进行修改。
通过函数的层层挪用来实现程序的逻辑结构。
中间通过文件的打开和关闭实现对文件内部所包括的数据的操作。
整个程序的设计思路到此终止。
第三部份:程序功能划分、图示及流程图
【功能模块划分及其流程图】
本程序功能模块依照程序设计的需求,综合程序的有效性、人性化、智能化的考虑,将程序划分为6个部份别离编写,程序主体功能将由这9个部份来完成。
这9个部份依次是:
1.登录界面函数;void login()
2.学生登录界面据函数:void stu_login()
3.治理员登录界面函数:void man_login()
4.退出界面函数:void bye_sys()
5.课程选择函数:void c_select()
6.课程阅读函数:void c_view()
7.课程查询函数:void c_search()
8.课程增加函数:void c_add()
9.课程删除函数:void c_delete()
10.菜单函数:void index()
11.主函数部份;main()
整体设计:
系统功能模块图部份函数流程图:
1、课程选择函数:
2、课程查询函数
3、课程增加函数
4、课程删除函数
第四部份:程序设计数据、运行结果
本程序是一款应用软件,故数据设计、程序运行结果应在程序的运用中得以表现,此刻通过一个程序的运用事例来对程序运行结果进行演示与实现。
【软件运用举例】
一、程序开始界面如下:
选择某个选项,如进行治理员登录,进行课程的增加
进入治理员界面:
二、再选择所要进行的操作,如进行课程增加,结果如下:
下面能够进行继续增加课程或退出:
3、选择课程阅读,能够分页查看相应的课程信息:
第一页:
第二页:
4、课程查询查找结果:
4、治理员课程删除操作:
删除后能够进行阅读,观看删除后的结果:
可见删除后只有一条记录。
删除操作完成正确。
下面进行学生操作的利用方式:
一、学生登岸界面:
二、选择学生选课选项:
3、学生登岸也可进行课程阅读和查询函数,其结果与治理员登岸相同,再也不演示。
第五部份:程序的优缺点
【程序的优势】
算法是程序的灵魂,程序的优势第一表此刻算法上的优势,第二才是功能上的。
[算法上的优势]要紧体此刻以下三点:
1.程序采纳main主函数方式设计,程序的主体的功能多数由该功能完成。
程序如此
设计有利于程序的进一步改良及有助于程序执行效率的提高。
2.程序对文件数据的读写采纳了fread和fwrite块读写函数,能够将文件中的数据
完全读出,然后赋到概念的数组中,再在相应的数组中进行一系列操作,最终再写入文件。
3.插入操作在本程序中将课程信息直接插入数组最后一个节点,从而减少了数据的
彼此移动,节省了时刻。
[功能上的优势]
要紧体此刻以下两点:
1.精练明了的程序菜单。
程序要紧采纳了层次不同的菜单,彼此独立又彼此联系,巧妙相接,符合用户的利用适应与思维。
2.人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。
程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,加倍有利于用户顺利、准确地看懂程序并进行操作。
【程序的缺点】
要紧表此刻以下两点:
1、本程序没有进行相应的密码操作,因此关于利用者来讲可能存在比较大的不保密
性。
需要改善。
2、本程序没有利用文本读写函数fscanf和fprintf,因此的到的课程文件和选课文
件都是二进制形式。
第六部份:心得体会
选课系统程序比起通信录程序来讲好写一些,由于本程序用到了数组,关于数组的操作把握的比较熟练,因此在编写程序的时候困难没有那么多。
本程序在编写的进程顶用到了许多通信录中的模块化设计和函数彼此挪用的思想,使得编写比较方便和好用。
通过该系统的课程设计分析,我把握了模块化设计的方式,明白得和运用了结构化程序设计的思想和方式,把握和提高了运用C语言进行程序设计的能力。
程序设计的进程,事实上是确信解决问题的详细步骤,而那个步骤通常叫做流程,在程序设计进程中理清楚整个问题的流程很重要,然后采取慢慢细化的方式实现整个程序。
关于一个较大的应用程序,一样不可能一次就设计出一个很完善的系统。
通常要先设计知足大体要求的系统,然后再测试或在利用的进程中不断完善,慢慢地做成一个功能很完善选修课程治理系统。
因此在进行调试的时候需要对许多变量明白得和把握其转变规律等,这关于我更好的把握visual C中调试的工具有专门大的帮忙。
总之通过这次课程设计,我对c语言的利用和明白得都有了专门大的加深,关于编程的思想也有了很多新的明白得和感受。
第七部份:附录
一、参考文献:
一、李丽娟主编,C语言程序设计教程(第二版),人民邮电出版社
二、严蔚敏主编,数据结构(C语言),清华大学出版社
3、崔单主编,C语言程序设计案例精粹,电子工业出版社
4、谭浩强主编,程序设计(第三版),清华大学出版社
二、源程序
#include""
#include""
#include""
#include""
void index();生登录\n");
printf("\t2.治理员登岸\n");
printf("\t3.退出本系统\n");
printf("\t请选择效劳类别:");
scanf("%d",&input);
if (input!=1&&input!=2&&input!=3) 增课程\n");
printf("\t2.删除课程\n");
printf("\t3.课程阅读\n");
printf("\t4.课程查询\n");
printf("\t5.退出\n");
printf("\n\n\t请选择效劳种类:");
scanf("%d",&in);
if(in!=1&&in!=2&&in!=3&&in!=4&&in!=5)
{
printf("\n\t没有这项效劳\t按任意从头选择");
getchar();getchar();
}
}while(in!=1&&in!=2&&in!=3&&in!=4&&in!=5);
switch(in)
{
case 1:c_add();break;
case 2:c_delete();break;
case 3:c_viewm();break;
case 4:c_searchm();break;
case 5:login();break;
}
}
void stu_login()生选课\n");
printf("\t2.课程阅读\n");
printf("\t3.课程查询\n");
printf("\t4.退出\n");
scanf("%d",&input);
if(input!=1&&input!=2&&input!=3&&input!=4)
{
printf("\n\t没有这项效劳~\n");
printf("\t按任意键从头选择");
getchar();
getchar();
}
}while(input!=1&&input!=2&&input!=3&&input!=4);
switch(input)
{
case 1:c_select();break;
case 2:c_views();break;
case 3:c_searchs();break;
case 4:login();break;
}
}
void c_select()
{
int n,in,i=0,j;int flag=0;
FILE *fp;
FILE *fp1;
char input;
struct course courses[10];
if((fp=fopen("","rb"))==NULL) _num==n)
flag++;
if(flag==0)
{
printf("\n\n\t\t不存在对应课程\n");
printf("\n\n\t\t继续选课请按1,退出请按2:\n");
scanf("%d",&in);
switch(in)
{
case 1:c_select();break;
case 2:stu_login();break;
default:
printf("输入错误,将返回登录界面!\n");
login();break;
}
}
else
{
fwrite(&courses[j],sizeof(struct course),1,fp1);
fclose(fp1);
printf("\n\n\t\t选课成功\t请选择:");
printf("\n\n\t\t1.继续选课");
printf("\n\n\t\t2.退出,返回登录界面!");
scanf("%d",&in);
switch(in)
{
case 1:c_select();break;
case 2:stu_login();break;
default:break;
}
}
}
void c_viewm()_num);
printf("\n\n\t课程名字:%s\n",courseview[n].c_name);
printf("\n\n\t课程学分:%d\n",courseview[n].c_score);
printf("\n\n\t课程已选人数:%d\n",courseview[n].c_nelepeo);
printf("\n\n\t课程人数上限:%d\n",courseview[n].c_melepeo);
printf("\n\n\t1.上一页\t2.下一页\t3.回目录");
printf("\n请选择:");
scanf ("%d",&inp);
switch(inp)
{
case 1:
{
if(n==0)
{
printf("\n\t已抵达首页\t按任意键返回");
input=getchar();
input=getchar();
}
else
{
n=n-1;
}
break;
}
case 2:
{
if(n==i-2)
{
printf("\n\t已抵达尾页\t按人意见返回");
input=getchar();
input=getchar();
}
else
{
n=n+1;
}
break;
}
case 3:{man_login();break;}
default:
{
printf("\n\t操作错误\t按任意键返回");
getchar();getchar();
break;
}
}
}
}while(inp!=3);
}
}
void c_views()_num);
printf("\n\n\t课程名字:%s\n",courseview[n].c_name);
printf("\n\n\t课程学分:%d\n",courseview[n].c_score);
printf("\n\n\t课程已选人数:%d\n",courseview[n].c_nelepeo);
printf("\n\n\t课程人数上限:%d\n",courseview[n].c_melepeo);
printf("\n\n\t1.上一页\t2.下一页\t3.回目录");
printf("\n请选择:");
scanf ("%d",&inp);
switch(inp)
{
case 1:
{
if(n==0)
{
printf("\n\t已抵达首页\t按任意键返回");
input=getchar();
input=getchar();
}
else
{
n=n-1;
}
break;
}
case 2:
{
if(n==i-2)
{
printf("\n\t已抵达尾页\t按人意见返回");
input=getchar();
input=getchar();
}
else
{
n=n+1;
}
break;
}
case 3:{stu_login();break;}
default:
{
printf("\n\t操作错误\t按任意键返回");
getchar();getchar();
break;
}
}
}
}while(inp!=3);
}
}
void c_searchs()
{
void stu_login();
void c_searchs();
int id,i=0,j,inp,k;
int flag=0;
FILE *fp;
struct course coursesear[10];
if ((fp=fopen("","rb"))==NULL) _num)
{
flag++;
k=j;
}
}
if(flag==1)
{
system("cls");
printf("\n\n\t课程编号:%d\n",coursesear[k].c_num);
printf("\n\n\t课程名字:%s\n",coursesear[k].c_name);
printf("\n\n\t课程学分:%d\n",coursesear[k].c_score);
printf("\n\n\t课程已选人数:%d\n",coursesear[k].c_nelepeo);
printf("\n\n\t课程人数上限:%d\n",coursesear[k].c_melepeo);
getchar();getchar();
printf("\n\n\t1.回目录继续查询\t2.退出查询系统\n");
printf("请选择:");
scanf("%d",&inp);
switch(inp)
{
case 1:c_searchs();
case 2:stu_login();
default:
{
printf("\n\t没有这项效劳\t请按任意键从头输入");
getchar();getchar();
}
}
}
else
{
system("cls");
printf("\n\n\t不存在对应记录\n");
printf("\n\n\t1.回目录继续查询\t2.退出查询系统\n");
printf("请选择:");
scanf("%d",&inp);
switch(inp)
{
case 1:c_searchs();
case 2:stu_login();
default:
{
printf("\n\t没有这项效劳\t请按任意键从头输入");
getchar();getchar();
}
}
}
}while(inp!=1);
}
void c_searchm()
{
void stu_login();
void c_searchm();
int id,i=0,j,inp,k;
int flag=0;
FILE *fp;
struct course coursesear[10];
if ((fp=fopen("","rb"))==NULL) _num)
{
flag++;
k=j;
}
}
if(flag==1)
{
system("cls");
printf("\n\n\t课程编号:%d\n",coursesear[k].c_num);
printf("\n\n\t课程名字:%s\n",coursesear[k].c_name);
printf("\n\n\t课程学分:%d\n",coursesear[k].c_score);
printf("\n\n\t课程已选人数:%d\n",coursesear[k].c_nelepeo);
printf("\n\n\t课程人数上限:%d\n",coursesear[k].c_melepeo);
getchar();getchar();
printf("\n\n\t1.回目录继续查询\t2.退出查询系统\n");
printf("请选择:");
scanf("%d",&inp);
switch(inp)
{
case 1:c_searchm();
case 2:man_login();
default:
{
printf("\n\t没有这项效劳\t请按任意键从头输入");
getchar();getchar();
}
}
}
else
{
system("cls");
printf("\n\n\t不存在对应记录\n");
printf("\n\n\t1.回目录继续查询\t2.退出查询系统\n");
printf("请选择:");
scanf("%d",&inp);
switch(inp)
{
case 1:c_searchm();
case 2:man_login();
default:
{
printf("\n\t没有这项效劳\t请按任意键从头输入");
getchar();getchar();
}
}
}
}while(inp!=1);
}
void c_add()程编号:");
scanf("%d",&;
printf("\n\n\t\t2.课程名字:");
scanf("%s",;
printf("\n\n\t\t3.课程学分:");
scanf("%d",&;
printf("\n\n\t\t4.课程已选人数:");
scanf("%d",&;
printf("\n\n\t\t5.课程人数上限:");
scanf("%d",&;
if((fp=fopen("","rb"))!=NULL)
{
do
{
fread(&courses[i],sizeof(struct course),1,fp);
i=i+1;
}while(!feof(fp));
fclose(fp);
for(j=0;j<=i-1;j++)
if==courses[j].c_num)
{
system("cls");
printf("\n\n\t\t\t对不起,那个编号已经利用过\n\n\t\t按任意键返回治理菜单");
getchar();getchar();
man_login();
break;
}
}
if((fp=fopen("","rb"))==NULL)
{
fp=fopen("","wb");
}
else
{
fclose(fp);
fp=fopen("","ab");
}
fwrite(&course_new,sizeof(struct course),1,fp);
fclose(fp);
printf("\n\n\t\t信息输入完毕\t按任意键继续");
getchar();getchar();
do
{
system("cls");
printf("\n\n\t\t1.继续输入");
printf("\n\n\t\t2.返回治理菜单");
printf("\n\n\t\t请选择");
scanf("%d",&inp);
if(inp!=1&&inp!=2)
{
printf("输入不符合要求\t按任意键从头选择");
getchar();getchar();
}
}while(inp!=1&&inp!=2);
switch(inp)
{
case 1:c_add();break;
case 2:man_login();break;
}
}
void c_delete()_num==n)
{
flag=1;
fp=fopen("","wb");
for(k=0;k<j;k++)
fwrite(&courses[k],sizeof(struct course),1,fp);
fclose(fp);
fp=fopen("","ab");
for(k=j+1;k<i-1;k++)
{
fwrite(&courses[k],sizeof(struct course),1,fp);
}
printf("\n\n\t\t记录已删除!\t按任意键返回\n\t\t");
getchar();getchar();
man_login();
fclose(fp);
}
}
if(flag==0)
{
printf("\n\n\t\t不存在对应的课程\t按任意键返回");
getchar();getchar();
man_login();
}
// printf("\n\n\t\t记录已删除!\t按任意键返回\n\t\t");
}
int main()
{
index();
login();
return 0;
}。