资源描述
题目一、学生选课管理系统
目录
第一部分:课程设计名称、目标、要求
第二部分:程序总体设计思绪
第三部分:程序功效划分、图示及步骤图
第四部分:程序设计数据、运行结果
第五部分:程序优缺点
第六部分:心得体会
第七部分:附录(源程序)
第八部分:附录(参考文件)
第一部分:课程设计名称、目标、要求
名称:学生选修课程系统设计
目标:利用C语言提升处理实际问题能力
试验环境:Microsoft Visual C++ 6.0
内容:
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总课时,讲课课时,试验或上机课时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。
【功效】
系统以菜单方法工作v
课程信息录入功效(课程信息用文件保留)--输入v
课程信息浏览功效--输出v
查询功效:(最少一个查询方法)--算法v
按学分查询l
按课程性质查询l
学生选修课程(可选项)v
第二部分:程序总体设计思绪
因为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、课程删除函数
第四部分:程序设计数据、运行结果
本程序是一款应用软件,故数据设计、程序运行结果应在程序利用中得以表现,现在经过一个程序利用事例来对程序运行结果进行演示和实现。
【软件利用举例】
1、程序开始界面以下:
选择某个选项,如进行管理员登录,进行课程增加
进入管理员界面:
2、再选择所要进行操作,如进行课程增加,结果以下:
下面能够进行继续增加课程或退出:
3、选择课程浏览,能够分页查看对应课程信息:
第一页:
第二页:
4、课程查询
查找结果:
4、 管理员课程删除操作:
删除后能够进行浏览,观察删除后结果:
可见删除后只有一条统计。删除操作完成正确。
下面进行学生操作使用方法:
1、学生登陆界面:
2、选择学生选课选项:
3、学生登陆也可进行课程浏览和查询函数,其结果和管理员登陆相同,不再演示。
第五部分:程序优缺点
【程序优点】
算法是程序灵魂,程序优点首先表现在算法上优点,其次才是功效上。
[算法上优点]关键表现在以下三点:
1. 程序采取main主函数方法设计,程序主体功效大全部由该功效完成。程序如此设计有利于程序深入改善及有利于程序实施效率提升。
2. 程序对文件数据读写采取了fread和fwrite块读写函数,能够将文件中数据完全读出,然后赋到定义数组中,再在对应数组中进行一系列操作,最终再写入文件。
3. 插入操作在本程序中将课程信息直接插入数组最终一个节点,从而降低了数据相互移动,节省了时间。
[功效上优点]
关键表现在以下两点:
1. 简练明了程序菜单。程序关键采取了层次不一样菜单,相互独立又相互联络,巧妙相接,符适用户使用习惯和思维。
2. 人性化程序提醒语言,程序提醒语言较人性化,不仅大多为祈使语句、疑问句,而且提醒明确,含有较强明确指导作用。程序提醒不仅层次分明,提醒方法多样,而且提醒信息井然有序,愈加有利于用户顺利、正确地看懂程序并进行操作。
【程序缺点】
关键表现在以下两点:
1、 本程序没有进行对应密码操作,所以对于使用者来说可能存在比较大不保密性。需要改善。
2、 本程序没有使用文本读写函数fscanf和fprintf,所以到课程文件和选课文件全部是二进制形式。
第六部分:心得体会
选课系统程序比起通讯录程序来讲好写部分,因为本程序用到了数组,对于数组操作掌握比较熟练,所以在编写程序时候困难没有那么多。
本程序在编写过程中用到了很多通讯录中模块化设计和函数相互调用思想,使得编写比较方便和好用。
经过该系统课程设计分析,我掌握了模块化设计方法,了解和利用了结构化程序设计思想和方法,掌握和提升了利用C语言进行程序设计能力。
程序设计过程,实际上是确定处理问题具体步骤,而这个步骤通常叫做步骤,在程序设计过程中理清楚整个问题步骤很关键,然后采取逐步细化方法实现整个程序。
对于一个较大应用程序,通常不可能一次就设计出一个很完善系统。通常要先设计满足基础要求系统,然后再测试或在使用过程中不停完善,慢慢地做成一个功效很完善选修课程管理系统。所以在进行调试时候需要对很多变量了解和掌握其改变规律等,这对于我愈加好掌握visual C中调试工含有很大帮助。
总而言之经过这次课程设计,我对c语言使用和了解全部有了很大加深,对于编程思想也有了很多新了解和感受。
第七部分:附录
一、参考文件:
1、李丽娟主编 ,C语言程序设计教程(第二版),人民邮电出版社
2、严蔚敏主编,数据结构(C语言),清华大学出版社
3、崔单主编,C语言程序设计案例精粹,电子工业出版社
4、谭浩强主编,程序设计(第三版),清华大学出版社
二、源程序
#include"stdio.h"
#include"stdlib.h"
#include"windows.h"
#include"string.h"
void index();//首页
void login();
void bye_sys();//退出界面
void stu_login();//学生登录菜单
void c_select();
void c_view();//课程浏览
void c_add();//增加课程
void c_delete();
void c_searchs();//学生查询函数
void c_searchm();//管理员查询函数
void c_viewm();//管理员浏览函数
void c_views();//学生浏览函数
struct course//定义课程结构体
{
int c_num;
char c_name[20];
int c_score;
int c_nelepeo;//课程已选人数
int c_melepeo;//课程人数上限
};
struct student
{
char s_number[10];
char s_password[10];
};
struct manager
{
char m_name[10];
char m_password[10];
};
void index()//首页
{
char input;
printf("\n\n\t\t\t*****************************\n");
printf("\t\t\t 湖南大学学生选课系统\n");
printf("\t\t\t*****************************\n\n\n");
printf("\t\t\t*****************************\n\n\n");
printf("\t\t\t*****************************\n\n\n");
printf("\t\t\t*****************************\n\n\n");
printf("\t\t\t**********设计者:刘晓斌******\n\n\n");
input=getchar();
system("cls");
}
void login()//登陆界面
{
void stu_login();
void man_login();
void bye_sys();
int input;
do
{
system("cls");
printf("\n\n\n\t1.学生登录\n");
printf("\t2.管理员登陆\n");
printf("\t3.退出本系统\n");
printf("\t请选择服务类别:");
scanf("%d",&input);
if (input!=1&&input!=2&&input!=3) //输入数不等于选项时候打印画面
{
printf("\n\t输入犯错!请重新选择~\n");
printf("\n\t按任意键返回选择页面~\n\t");
getchar();getchar();
system("cls");
}
if(input==3)//假如输入3退出系统
{
bye_sys();
}
}while(input!=1&&input!=2&&input!=3);
switch(input)
{
case 1:stu_login();break;
case 2:man_login();break;
}
}
void bye_sys()//退出界面
{
exit(0);
}
void man_login()
{
void c_add();
void c_delete();
void c_view();
void c_searchm();
int in;
do
{
system("cls");
printf("\n\n\t1.新增课程\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()//学生登录菜单
{
void c_select();
void c_view();
void c_searchs();
void login();
int input;
do
{
system("cls");
printf("\n\n\n\t--学生登陆--");
printf("\n\n\t1.学生选课\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("course.dat","rb"))==NULL) //判定是否存在课程
{
printf("\n\n\n\t课程不存在\n\n");
printf("\t<按任意键返回管理菜单>\n\t");
input=getchar();
input=getchar();
stu_login();//进入学生登陆菜单
}
else//存在话循环读取文件中信息直到文件指针到文件尾部
{
do
{
fread(&courses[i],sizeof(struct course),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);//文件读完后关闭
}
printf("\n\n\t\t请输入你要选课程编号:");
scanf("%d",&n);
if((fp1=fopen("courseselect.dat","rb"))==NULL)
{
fp1=fopen("courseselect.dat","wb");
}
else
{
fclose(fp1);
fp1=fopen("courseselect.dat","ab");
}
for(j=0;j<i;j++)
if(courses[j].c_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()//课程浏览
{
void stu_login();
void c_view() ;
int inp,i=0,n=0;
FILE *fp;
char input;
struct course courseview[10];
if((fp=fopen("course.dat","rb"))==NULL) //判定是否存在课程
{
system("cls");
printf("\n\n\n\t课程不存在\n\n");
printf("\t<按任意键返回管理菜单>\n\t");
getchar();getchar();
stu_login();//进入学生登陆菜单
}
else//存在话循环读取文件中信息直到文件指针到文件尾部
{
do
{
fread(&courseview[i],sizeof(struct course),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);//文件读完后关闭
do
{
system("cls");
if(i==1)
{
printf("\n\n\n\t\t\t没有统计!\n");
getchar();getchar();
man_login();
}
else
{
printf("\n\t------共有%d条统计-------",i-1);
printf("\n\n\t课程编号: %d\n",courseview[n].c_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()//课程浏览
{
void stu_login();
void c_view() ;
int inp,i=0,n=0;
FILE *fp;
char input;
struct course courseview[10];
if((fp=fopen("course.dat","rb"))==NULL) //判定是否存在课程
{
system("cls");
printf("\n\n\n\t课程不存在\n\n");
printf("\t<按任意键返回管理菜单>\n\t");
getchar();getchar();
stu_login();//进入学生登陆菜单
}
else//存在话循环读取文件中信息直到文件指针到文件尾部
{
do
{
fread(&courseview[i],sizeof(struct course),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);//文件读完后关闭
do
{
system("cls");
if(i==1)
{
printf("\n\n\n\t\t\t没有统计!\n");
getchar();getchar();
stu_login();
}
else
{
printf("\n\t------共有%d条统计-------",i-1);
printf("\n\n\t课程编号: %d\n",courseview[n].c_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("course.dat","rb"))==NULL) //判定课程信息是否存在
{
system("cls");
printf("\n\n\t课程不存在\t按任意键返回");
getchar();getchar();
stu_login();
}
else//存在话循环读取文件中信息直到文件指针到文件尾部
{
do
{
fread(&coursesear[i],sizeof(struct course),1,fp);
i=i+1;
}while(!feof(fp));
fclose(fp);
}
system("cls");
printf("\n\n\t\t\t请输入你要查询课程编号:");
scanf("%d",&id);
do//检验输入是否符合要求
{
for(j=0;j<i-1;j++)
{
if(id==coursesear[j].c_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\
展开阅读全文