C学生选课系统.docx
《C学生选课系统.docx》由会员分享,可在线阅读,更多相关《C学生选课系统.docx(28页珍藏版)》请在冰豆网上搜索。
![C学生选课系统.docx](https://file1.bdocx.com/fileroot1/2023-1/22/ec62327e-fd1b-4c85-885c-1e216d045908/ec62327e-fd1b-4c85-885c-1e216d0459081.gif)
C学生选课系统
摘要
本课程设计的目的是设计一个学生选修课程系统的程序,用来实现对学生成绩的管理,其中包括学生信息的文件读入、添加、查询、保存、删除以和相应的课程信息管理。
程序设计了两个类,其中一个包含学生的学号、姓名、选课数以和选修总学分,另一个则包含了课程的信息,包括课程编号、课程名称、课程性质、课时等等。
然后通过数组、向量、集合等来实现学生选课信息的记录、保存,删除等相关操作从而达到管理学生选课的。
因为这次课程设计,我们可以熟练的使用C++语言来完成一个学生选课管理系统。
但是编写过程中难免会遇到错误,希望老师给予指导。
1需求分析
计算机技术作为信息化的核心技术受到全社会的普遍重视。
如今,计算机的使用也已不再局限于科学计算,它已进入人类社会的各个领域并发挥着越来越重要的作用。
深入掌握计算机专业知识、具有良好系统设计与分析能力的计算机高级专业人才在社会上深受欢迎。
而系统设计与分析能力的培养需要通过实践训练才能获得。
通过计算机对一些系统的管理已经成为一种系统、便捷的方式。
本课程设计就是用C++设计学生选课系统的问题,实现对学生选课的管理操作。
本课程设计的目的是设计一个学生选修课程系统的程序,用来实现对学生成绩的管理,其中包括学生信息的文件读入、添加、查询、保存、删除以和相应的课程信息管理。
程序设计了两个类,其中一个包含学生的学号、姓名、选课数以和选修总学分,另一个则包含了课程的信息,包括课程编号、课程名称、课程性质、课时等等。
然后通过数组、向量、集合等来实现学生选课信息的记录、保存,删除等相关操作从而达到管理学生选课的。
2概要设计
2.1对象设计
把学生和学科信息设计成类student和类subject,通过文件操作函数对输入的学生和学科信息进行读取和存放。
2.2设计优缺点
优点:
1.人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。
程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地进行程序的操作。
2.所有的操作大多是在内存中实现,增加操作的速度,十分的方便。
缺点:
1.程序虽然经过多次精简,但仅仅是形式上、小范围的精简,仍未得到本质上的精简,即未找到更加简单、更加高效、更加合理、更小占用的资源的算法。
2.程序仍然存在不合理的地方,例如程序某些部分输入错误会导致程序中止或转向其他功能模块,即程序建议用户注意提示,进行合理的准确的输入,这样更有利于管理工作。
3详细设计
3.1总体设计思路
通过对课题的分析,程序的要求是设计选修课管理系统,对选修课程能够进行录入和修改操作等,要求有主界面和退出功能。
首先,考虑到程序的数据输入,可以设置一个课程增加选项,通过该界面,进行选修课的录入和修改操作,最后将录入的课程存到相应的文件中。
然后定义各种函数的功能包括:
查看、查询、删除等。
另一个为选课界面,该界面学生可以进行课程选择和浏览查询等操作。
在进行该操作之前需要对保存的文件进行读取,然后对其中的东西进行查询等。
在学生选好课程以后,可以将选好的课程保存于相应的文件中,以便下次进行修改。
通过函数的层层调用来实现程序的逻辑结构。
中间通过文件的打开和关闭实现对文件内部所包含的数据操作。
为了方便用户控制管理,又添加了一些更人性化的功能如人工调试,运行配置等功能。
文件存储信息的方式更是简化了程序结构,使程序读起来更容易懂。
除此之外,本系统采用分块实现功能,将要实现的增加课程信息、修改课程信息、删除课程信息、增加学生信息和修改学生信息等功能分别用不同的子程序来完成,这样不仅方便了我们程序调试,更提高了程序的移植性。
3.2类定义
classsubject//建立一个课程类,保存课程信息
classstudent//建立一个学生类,保存学生信息
函数:
该程序包含的主要函数功能说明:
voidXuanKeMenu();//选课主菜单函数
intfind(intno);
voidSave();
voidDL();//登录界面的函数
voidMainMenu();
voidoutput();
voidLoad();//载入文件信息的函数
voidLoad2();
voidquit();
voidadd();
voidChaXun();
voidchaxun1();
voidchaxun2();
voidxuanke();
voidtq1();//提取选课编号的函数
voidtq2();
voidAddStuInfo();//添加学生信息的函数
voidSaveStuInfo();//保存学生信息到文件中
voiddel();//删除已选课程信息的函数
voidsum();
3.3宏定义
#defineN10
3.4文件操作函数
voidAddStuInfo();//添加学生信息的函数
voidSaveStuInfo();//保存学生信息到文件中
3.5用户操作函数
//该函数根据用户的选择,完成指定的操作
voidDL()
//登录界面
voidMainMenu()
//系统主菜单
voidoutput()
//显示函数:
将课程信息输出到屏幕
voidAddStuInfo()
//增加学生信息,并保存在文件中
voidadd()
//增加课程信息,并保存在文件中
voiddel()
//删除已选课程信息
voidChaXun()
//查询主菜单函数
voidxuanke()
//选课函数:
执行选课功能
voidsum()
//统计函数,统计并输出文件中的数据
3.6其他重要函数
voidLoad()
//载入函数:
载入课程信息(文件此前已建立)
voidLoad2()
//载入学生信息(文件此前已建立)
voidSave()
//保存已选的课程信息
voidSaveStuInfo()
//保存学生信息
voidquit()
//退出函数
voidchaxun1()//按学分方式查询
voidchaxun2()
//按课程性质查询
voidtq1(char*str)
//提取出选课时输入的课程编号
intfind(intno)
//寻找函数,找到想要的课程编号
voiddisplay(inti)
//输出函数
voidtq2(char*str)
//提取函数:
提前删除时输入的课程编号
4测试结果和运行效果
运行程序后,登陆界面登陆学号,进入登陆后的界面,在其中可以选择查看课程信息、添加课程信息、查询课程信息、学生选课、统计情况和退出。
按照提示输入0-5和Enter键进入下级菜单,或者退出程序。
图4-1登陆后的界面
输入1进入查看课程信息页面后,给出存放在文件类的所有课程信息,按y和Enter键停留界面,按n和Enter退出。
图4-2进入查看课程信息界面
在主菜单中选择2,进入添加课程信息界面。
图4-3添加课程时的界面
在主菜单中选4,学生选课界面。
图4-4学生选课时的界面
在登陆界面输入exit退出系统。
图4-5退出系统时的界面
5系统开发所用到的技术
操作系统:
Windows7
开发软件:
MicrosoftVisualStudio2013
技术:
功能模块(函数);向量;文件保存和读取。
模块:
是抽象的概念,按照功能划分模块,尽可能保证每个模块互相独立。
这个一般同程序的逻辑设计有关,同具体语言关系不大。
函数:
一般都有有明确的定义,有明确的语法。
用来完成相对独立功能和程序。
向量(Vector):
Vector是C++标准程序库中的一个类,可视为会自动扩展容量的数组,以循序(Sequential)的方式维护变量集合。
vector的特色包括支持随机存取,在集合尾端增删元素很快,但是在集合中间增删元素比较费时。
vector是C++标准程序库中的众多容器(container)之一,除此之外还有list、set、map、…等等。
vector以模板(泛型)方式实现,可以存储任何类型的变量,包括用户自定义的数据型态。
文件操作:
C语言对文件的处理一般有两种方法,缓冲文件系统和非缓冲文件系统。
在文件系统中,系统对文件进行读写之前首先在内存区开辟一个称作缓冲区的专用内存区域。
在缓冲文件系统中,系统对文件进行读写之前首先在内存区开辟一个称作缓冲区的专用内存区域。
从内存向磁盘写文件时必须先写入缓冲区,装满缓冲区后才一起写到磁盘上去;从磁盘读文件时必须先把一批数据读到缓冲区(充满缓冲区),然后再从缓冲区将数据逐个送到用户数据区。
在非缓冲文件系统中,文件的处理不自动开辟确定大小的缓冲区,而是由程序设定的缓冲区。
一般用缓冲文件系统进行的输入/输出。
用非缓冲文件系统进行的输入/输出称为低级(低层)输入/输出。
ANSIC标准采用缓冲文件系统,现代的操作系统也广泛采用缓冲型文件系统。
参考文献
[1]李素若.C++面向对象程序设计.北京:
中国水利水电出版社,2013.
[2]曾辉.王更生.C++程序设计实训教程.北京:
北京邮电大学出版社,2011
[3]揣锦华等编.《C++程序设计语言》.西安:
西安电子科技大学出版社,2011
[4]张素琴主编.《C++程序设计语言》.北京:
清华大学出版社,2010
[5]邓飞,李瑶主编《C++程序设计》.北京科海电子出版社2009
[6]李军民等编.《C++程序设计语言》.西安:
西安电子科技大学出版社,2011
附录全部代码
#include
#include
#include
#include
#include
#include
#include
#defineN10
usingnamespacestd;
intF;
classsubject//建立一个课程类,保存课程信息
{
public:
intnum;
charname[30];
charcha[20];
intTime,time1,time2,xf;
charkkxq[20];
}S;
classstudent//建立一个学生类,保存学生信息
{
public:
charnam[10];
charnum[15];
intzxf;
intcnt;
}Stu;
vectorv;//声明一个指向课程信息的向量
vectorz;//声明一个指向学生信息的向量
setT;//建立一个集合
vector>TT;//建立一个向量集合
set:
:
iteratorit;//建立一个迭代器
voidXuanKeMenu();//声明一个选课主菜单函数
intfind(intno);
voidSave();
voidDL();//声明一个登录界面的函数
voidMainMenu();
voidoutput();
voidLoad();//声明载入文件信息的函数
voidLoad2();
voidquit();
voidadd();
voidChaXun();
voidchaxun1();
voidchaxun2();
voidxuanke();
voidtq1();//声明提取信息的函数
voidtq2();
voidAddStuInfo();//声明添加学生信息的函数
voiddel();
voidsum();
voidAddStuInfo()
{
FILE*fp;
fp=fopen("d:
\\student.txt","a");fseek(fp,0,2);//打开学生信息文件
system("cls");
cout<cout<<"\t\t***************************************************"<cout<<"\t\t*****************学生选课系统******************"<cout<<"\t\t***************************************************"<cout<<"\t\t\t请输入学号:
";cin>>Stu.num;
cout<<"\t\t\t请输入姓名:
";cin>>Stu.nam;
St=Stu.zxf=0;
fprintf(fp,"%s%s%d%d\n",Stu.num,Stu.nam,St,Stu.zxf);//存入文件
z.push_back(Stu);T.clear();TT.push_back(T);//用向量指向学生信息
fclose(fp);
}
voidadd()
{
A:
system("cls");
cout<cout<<"\t********************************************************"<cout<<"\t**********************课程信息*******************"<cout<<"\t********************************************************"<cout<<"\t\t\t请输入课程编号:
";
cin>>S.num;
cout<<"\t\t\t请输入课程名称:
";
cin>>S.name;
cout<<"\t\t\t请输入课程性质:
";
cin>>S.cha;
cout<<"\t\t\t请输入总课时:
";
cin>>S.Time;
cout<<"\t\t\t请输入授课学时";
cin>>S.time1;
cout<<"\t\t\t请输入上机学时(实验学时):
";
cin>>S.time2;
cout<<"\t\t\t请输入学分:
";
cin>>S.xf;
cout<<"\t\t\t请输入开课学期:
";
cin>>S.kkxq;
v.push_back(S);
Save();
cout<";
strings;cin>>s;
if(s[0]=='Y'||s[0]=='y')gotoA;
elseMainMenu();
}
voidSave()//保存已选的课程信息
{
FILE*fp;
fp=fopen("d:
\\subject.txt","w");
for(unsignedinti=0;ifprintf(fp,"%d%s%s%d%d%d%d%s\n",v[i].num,v[i].name,v[i].cha,v[i].Time,v[i].time1,v[i].time2,v[i].xf,v[i].kkxq);
fclose(fp);
}
voidSaveStuInfo()//保存学生信息
{
FILE*fp;
fp=fopen("d:
\\student.txt","w");
for(unsignedinti=0;i{
fprintf(fp,"%s%s%d%d",z[i].num,z[i].nam,z[i].cnt,z[i].zxf);
for(it=TT[i].begin();it!
=TT[i].end();it++)
fprintf(fp,"%d",*it);
fprintf(fp,"\n");
}
fclose(fp);
}
voidquit()//退出函数
{
exit
(1);
}
voidChaXun()//查询主菜单函数
{
system("cls");
cout<cout<<"\t********************************************************"<cout<<"\t**********************课程信息*******************"<cout<<"\t********************************************************"<cout<<"\t\t\t\t请选择查询方式:
\n\t\t\t\t[1]学分查询\n\t\t\t\t[2]课程性质查询\n\t\t\t\t[0]返回主菜单\n\n";
cout<<"\t\t\t\t请选择[0-2]:
";
intchoice;
cin>>choice;
if(choice>=0&&choice<3)
{
if(choice==1)chaxun1();
if(choice==2)chaxun2();
if(choice==0)MainMenu();
}
elseChaXun();
}
voidchaxun1()//按学分方式查询
{
system("cls");intcnt=0;
cout<cout<<"\t********************************************************"<cout<<"\t**********************课程信息*******************"<cout<<"\t********************************************************"<cout<<"\t请输入学分:
";
intkey;
cin>>key;
cout<<"\t课程"<<""<<"课程"<<"课程"<<""<<"总"
<<""<<"授课"<<""<<"实验或"<<""<<"学分"<<""<<"开课"<cout<<"\t编号"<<""<<"名称"<<"性质"<<""<<"学时"
<<""<<"学时"<<""<<"上机学时"<<""<<"学分"<<""<<"学期"<for(unsignedinti=0;i{
if(cnt&&cnt%10==0)
{
cout<cout<<"\t按任意键查看下一页";_getch();
system("cls");
cout<cout<<"\t********************************************************"<cout<<"\t**********************课程信息*******************"<cout<<"\t********************************************************"<cout<<"\t课程"<<""<<"课程"<<"课程"<<""<<"总"
<<""<<"授课"<<""<<"实验或"<<""<<"学分"<<""<<"开课"<cout<<"\t编号"<<""<<"名称"<<"性质"<<""<<"学时"
<<""<<"学时"<<""<<"上机学时"<<""<<"学分"<<""<<"学期"<}
if(v[i].xf==key)
{
cnt++;
printf("\t%3d%12s%8s%4d%6d%8d%8d%7s\n",
v[i].num,v[i].name,v[i].cha,v[i].Time,v[i].time1,v[i].time2,v[i].xf,v[i].kkxq);
}
}
cout<";
strings;cin>>s;
if(s[0]=='Y'||s[0]=='y')chaxun1();
elseMainMenu();
}
voidchaxun2()//按课程性质查询
{
system("cls");intcnt=0;
cout<cout<<"\t********************************************************"<cout<<"\t**********************课程信息*******************"<cout<<"\t********************************************************"<cout<<"\t请输入课程性质:
";
charkey[20];
cin>>key;
cout<<"\t课程"<<""<<"课程"<<"课程"<<""<<"总"
<<""<<"授课"<<""<<"实验或"<<""<<"学分"<<"