赞
踩
项目要求:
选修课查询系统
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验学时,学分,开课学期等信息,试设计一选修课查询系统,使之能提供以下功能:
1)系统以菜单方式工作
菜单如下:
a课程录入
b课程浏览
c查询 按学分查询 按课程性质查询
d退出
2)课程信息录入功能(课程信息用文件保存)--输入;
3)课程信息浏览功能--输出;
4)按学分查询;
5)按课程性质查询;
设计思路:
1.按照要求定义课程结构体:
- typedef struct kemu{
- int bianhao;
- string mingcheng;
- string xingzhi;
- int zhongxueshi;
- int shoukexueshi;
- double xuefen;
- int kaishexueqi;
- } K;
-
- K ke[100];
- int num;
定义课程结构体,同时把课程总数作为全局变量,可以方便后面的遍历查找操作。
2.整体架构:
首先是一个欢迎界面,打印提供的业务,然后按照要求写出主函数,先做一个整体的架构,再把每个函数填全。
主函数代码:
- int main(){
- welcome();
- char a;
- while(cout<<"请选择业务:",cin>>a){
- switch(a){
- case 'a':
- cout<<"请输入录入课程数:";
- cin>>num;
- for(int k=0;k<num;k++){
- luru(k);
- cout<<endl;
- }
- cout<<"录入成功"<<endl;
- break;
-
- case 'b':
- liulan();
- break;
-
- case 'c':
- chaxun();
- break;
-
- case 'd':
- return 0;
- }
- }
- return 0;
- }

要求有四个功能,其中,查询可以按照学分和课程性质进行查找,所以声明函数如下:
void welcome();
void print(int i);
void luru(int k);
void liulan();
void chaxun();
void xuefen_chaxun(double n);
void xingzhi_chaxun(string s);
因为两个查询查到之后都是要打印的,所以为了缩减代码行数,我们定义了print函数。
3.函数 void luru(int k);
- void luru(int k){
- cout<<"请输入:"<<endl;
- cout<<"课程编号:";cin>>ke[k].bianhao;
- cout<<"课程名称:";cin>>ke[k].mingcheng;
- cout<<"课程性质:";cin>>ke[k].xingzhi;
- cout<<"总学时:";cin>>ke[k].zhongxueshi;
- cout<<"授课学时:";cin>>ke[k].shoukexueshi;
- cout<<"实验学分:";cin>>ke[k].xuefen;
- cout<<"开设学期:";cin>>ke[k].kaishexueqi;
- }
给使用者提示,然后输入结构体中的具体内容。
4.函数 void liulan();
- void liulan(){
- int i;
- freopen("output.txt","w",stdout);//文件output.txt的建立与打开
- //在文件中打印结构体数组中的信息
- for(i=0;i<num;i++){
- print(i);
- cout<<endl;
- }
- //文件的关闭
- freopen("CON","w",stdout);
- //第二次遍历,控制台上打印信息
- for(i=0;i<num;i++){
- print(i);
- cout<<endl;
- }
- return;
- }

因为要求要把课程信息存在文件中,还要把课程信息打印在控制台上。所以我们把结构体数组遍历两遍,一次把信息写入文件.txt中,第二次打印在控制台上。
5.函数 void chaxun();
- void chaxun(){
- cout<<"你有以下选择:"<<endl;
- cout<<"1:按学分查询"<<endl;
- cout<<"2:按性质查询"<<endl;
- int id;
- cin>>id;
- if(id==1){
- double xuefen;
- cout<<"请输入你想查询的学分:";
- cin>>xuefen;
- xuefen_chaxun(xuefen);
- cout<<endl;
- }else
- if(id==2){
- string xingzhi;
- cout<<"请输入你想查询的性质:";
- cin>>xingzhi;
- xingzhi_chaxun(xingzhi);
- cout<<endl;
- }
- }

查询功能有两个:1.按学分查询 2.按课程性质查询
所以我们要让用户选择按哪个进行查询,然后按分支结构分支出两个函数。
6.函数 void xuefen_chaxun(double n);与void xingzhi_chaxun(string s);
- void xuefen_chaxun(double n){
- bool b=0;
- for(int k=0;k<num;k++){
- if(ke[k].xuefen==n){
- b=1;
- cout<<"已找到:"<<endl;
- print(k);
- }
- }
- if(b==0) cout<<"未找到"<<endl;
- }
-
- void xingzhi_chaxun(string s){
- bool b=0;
- for(int k=0;k<num;k++){
- if(s==ke[k].xingzhi){
- b=1;
- cout<<"已找到:"<<endl;
- print(k);
- }
- }
- if(b==0) cout<<"未找到"<<endl;
- }

这两个函数本质上都是遍历这个课程信息,然后进行信息比对,比对成功后,就打印课程信息。只不过一个是浮点数,一个是字符串。string的好处就是不用调用strcmp();直接用==即可进行比对。
这个程序的代码:
- #include <iostream>
- #include <cstdio>
- #include <fstream>
-
- using namespace std;
-
- void welcome();
- void print(int i);
- void luru(int k);
- void liulan();
- void chaxun();
- void xuefen_chaxun(double n);
- void xingzhi_chaxun(string s);
-
- typedef struct kemu{
- int bianhao;
- string mingcheng;
- string xingzhi;
- int zhongxueshi;
- int shoukexueshi;
- double xuefen;
- int kaishexueqi;
- } K;
-
- K ke[100];
- int num;
-
- int main(){
- welcome();
- char a;
- while(cout<<"请选择业务:",cin>>a){
- switch(a){
- case 'a':
- cout<<"请输入录入课程数:";
- cin>>num;
- for(int k=0;k<num;k++){
- luru(k);
- cout<<endl;
- }
- cout<<"录入成功"<<endl;
- break;
-
- case 'b':
- liulan();
- break;
-
- case 'c':
- chaxun();
- break;
-
- case 'd':
- return 0;
- }
- }
- return 0;
- }
-
- void welcome(){
- cout<<"欢迎来到选修课查询系统:"<<endl;
- cout<<"本系统提供以下业务:"<<endl;
- cout<<"a:课程录入"<<endl;
- cout<<"b:课程浏览"<<endl;
- cout<<"c:查询"<<endl;
- cout<<"d:退出"<<endl;
- }
-
- void print(int i){
- cout<<"课程编号:";printf("%4d\n",ke[i].bianhao);
- cout<<"课程名称:";printf("%10s\n",ke[i].mingcheng.c_str());
- cout<<"课程性质:";printf("%10s\n",ke[i].xingzhi.c_str());
- cout<<"总学时:";printf("%4d\n",ke[i].zhongxueshi);
- cout<<"授课学时:";printf("%4d\n",ke[i].shoukexueshi);
- cout<<"实验学分:";printf("%4.2f\n",ke[i].xuefen);
- cout<<"开设学期:";printf("%5d\n",ke[i].kaishexueqi);
- }
-
- void luru(int k){
- cout<<"请输入:"<<endl;
- cout<<"课程编号:";cin>>ke[k].bianhao;
- cout<<"课程名称:";cin>>ke[k].mingcheng;
- cout<<"课程性质:";cin>>ke[k].xingzhi;
- cout<<"总学时:";cin>>ke[k].zhongxueshi;
- cout<<"授课学时:";cin>>ke[k].shoukexueshi;
- cout<<"实验学分:";cin>>ke[k].xuefen;
- cout<<"开设学期:";cin>>ke[k].kaishexueqi;
- }
-
- void liulan(){
- int i;
- freopen("output.txt","w",stdout);
- for(i=0;i<num;i++){
- print(i);
- cout<<endl;
- }
- freopen("CON","w",stdout);
- for(i=0;i<num;i++){
- print(i);
- cout<<endl;
- }
- return;
- }
-
- void xuefen_chaxun(double n){
- bool b=0;
- for(int k=0;k<num;k++){
- if(ke[k].xuefen==n){
- b=1;
- cout<<"已找到:"<<endl;
- print(k);
- }
- }
- if(b==0) cout<<"未找到"<<endl;
- }
-
- void xingzhi_chaxun(string s){
- bool b=0;
- for(int k=0;k<num;k++){
- if(s==ke[k].xingzhi){
- b=1;
- cout<<"已找到:"<<endl;
- print(k);
- }
- }
- if(b==0) cout<<"未找到"<<endl;
- }
-
- void chaxun(){
- cout<<"你有以下选择:"<<endl;
- cout<<"1:按学分查询"<<endl;
- cout<<"2:按性质查询"<<endl;
- int id;
- cin>>id;
- if(id==1){
- double xuefen;
- cout<<"请输入你想查询的学分:";
- cin>>xuefen;
- xuefen_chaxun(xuefen);
- cout<<endl;
- }else
- if(id==2){
- string xingzhi;
- cout<<"请输入你想查询的性质:";
- cin>>xingzhi;
- xingzhi_chaxun(xingzhi);
- cout<<endl;
- }
- }


第二代系统:增加了在文件中读入课程信息:
- #include <iostream>
- #include <cstdio>
- #include <fstream>
- #include <cstring>
-
- using namespace std;
-
- void welcome();
- void print(int i);
- void luru();
- void liulan();
- void chaxun();
- void xuefen_chaxun(double n);
- void xingzhi_chaxun(char *s);
-
- typedef struct kemu{
- int bianhao;
- char mingcheng[100];
- char xingzhi[100];
- int zhongxueshi;
- int shoukexueshi;
- double xuefen;
- int kaishexueqi;
- } K;
-
- K ke[100];
- int num=0;
-
- int main(){
- welcome();
- char a;
- while(cout<<"请选择业务:",cin>>a){
- switch(a){
- case 'a':
- luru();
- cout<<"录入成功"<<endl;
- break;
-
- case 'b':
- liulan();
- break;
-
- case 'c':
- chaxun();
- break;
-
- case 'd':
- return 0;
- }
- }
- return 0;
- }
-
- void welcome(){
- cout<<"欢迎来到选修课查询系统:"<<endl;
- cout<<"本系统提供以下业务:"<<endl;
- cout<<"a:课程录入"<<endl;
- cout<<"b:课程浏览"<<endl;
- cout<<"c:查询"<<endl;
- cout<<"d:退出"<<endl;
- }
-
- void print(int i){
- cout<<"课程编号:";printf("%4d\n",ke[i].bianhao);
- cout<<"课程名称:";printf("%10s\n",ke[i].mingcheng);
- cout<<"课程性质:";printf("%10s\n",ke[i].xingzhi);
- cout<<"总学时:";printf("%4d\n",ke[i].zhongxueshi);
- cout<<"授课学时:";printf("%4d\n",ke[i].shoukexueshi);
- cout<<"实验学分:";printf("%4.2f\n",ke[i].xuefen);
- cout<<"开设学期:";printf("%5d\n",ke[i].kaishexueqi);
- }
-
- void luru(){
- cout<<"请输入录入课程总数:";
- cin>>num;
- FILE *fp=fopen("input.txt","r");
- for(int i=0;i<num;i++){
- fscanf(fp,"%d %s %s %d %d %lf %d",&ke[i].bianhao,ke[i].mingcheng,ke[i].xingzhi,
- &ke[i].zhongxueshi,&ke[i].shoukexueshi,&ke[i].xuefen,&ke[i].kaishexueqi);
- }
- }
-
- void liulan(){
- int i;
- freopen("output.txt","w",stdout);
- for(i=0;i<num;i++){
- print(i);
- cout<<endl;
- }
- freopen("CON","w",stdout);
- for(i=0;i<num;i++){
- print(i);
- cout<<endl;
- }
- return;
- }
-
- void xuefen_chaxun(double n){
- bool b=0;
- for(int k=0;k<num;k++){
- if(ke[k].xuefen==n){
- b=1;
- cout<<"已找到:"<<endl;
- print(k);
- }
- }
- if(b==0) cout<<"未找到"<<endl;
- }
-
- void xingzhi_chaxun(char *s){
- bool b=0;
- for(int k=0;k<num;k++){
- if(strcmp(s,ke[k].xingzhi)==0){
- b=1;
- cout<<"已找到:"<<endl;
- print(k);
- }
- }
- if(b==0) cout<<"未找到"<<endl;
- }
-
- void chaxun(){
- cout<<"你有以下选择:"<<endl;
- cout<<"1:按学分查询"<<endl;
- cout<<"2:按性质查询"<<endl;
- int id;
- cin>>id;
- if(id==1){
- double xuefen;
- cout<<"请输入你想查询的学分:";
- cin>>xuefen;
- xuefen_chaxun(xuefen);
- cout<<endl;
- }else
- if(id==2){
- char xingzhi[100];
- cout<<"请输入你想查询的性质:";
- cin>>xingzhi;
- xingzhi_chaxun(xingzhi);
- cout<<endl;
- }
- }

输出显示在文件output.txt中,也在控制台上显示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。