当前位置:   article > 正文

选课系统设计思路_选题八:学生选修课程系统设计假定有n门课程,每门课程有:课程编号,课程名称,课

选题八:学生选修课程系统设计假定有n门课程,每门课程有:课程编号,课程名称,课

项目要求:

选修课查询系统

假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验学时,学分,开课学期等信息,试设计一选修课查询系统,使之能提供以下功能:

1)系统以菜单方式工作

        菜单如下:

                a课程录入

                b课程浏览

                c查询  按学分查询 按课程性质查询

                d退出

2)课程信息录入功能(课程信息用文件保存)--输入;

3)课程信息浏览功能--输出;

4)按学分查询;

5)按课程性质查询;

设计思路:

1.按照要求定义课程结构体:

  1. typedef struct kemu{
  2. int bianhao;
  3. string mingcheng;
  4. string xingzhi;
  5. int zhongxueshi;
  6. int shoukexueshi;
  7. double xuefen;
  8. int kaishexueqi;
  9. } K;
  10. K ke[100];
  11. int num;

定义课程结构体,同时把课程总数作为全局变量,可以方便后面的遍历查找操作。 

2.整体架构:

首先是一个欢迎界面,打印提供的业务,然后按照要求写出主函数,先做一个整体的架构,再把每个函数填全。

主函数代码:

  1. int main(){
  2. welcome();
  3. char a;
  4. while(cout<<"请选择业务:",cin>>a){
  5. switch(a){
  6. case 'a':
  7. cout<<"请输入录入课程数:";
  8. cin>>num;
  9. for(int k=0;k<num;k++){
  10. luru(k);
  11. cout<<endl;
  12. }
  13. cout<<"录入成功"<<endl;
  14. break;
  15. case 'b':
  16. liulan();
  17. break;
  18. case 'c':
  19. chaxun();
  20. break;
  21. case 'd':
  22. return 0;
  23. }
  24. }
  25. return 0;
  26. }

要求有四个功能,其中,查询可以按照学分和课程性质进行查找,所以声明函数如下:

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);

  1. void luru(int k){
  2. cout<<"请输入:"<<endl;
  3. cout<<"课程编号:";cin>>ke[k].bianhao;
  4. cout<<"课程名称:";cin>>ke[k].mingcheng;
  5. cout<<"课程性质:";cin>>ke[k].xingzhi;
  6. cout<<"总学时:";cin>>ke[k].zhongxueshi;
  7. cout<<"授课学时:";cin>>ke[k].shoukexueshi;
  8. cout<<"实验学分:";cin>>ke[k].xuefen;
  9. cout<<"开设学期:";cin>>ke[k].kaishexueqi;
  10. }

给使用者提示,然后输入结构体中的具体内容。

4.函数 void liulan();

  1. void liulan(){
  2. int i;
  3. freopen("output.txt","w",stdout);//文件output.txt的建立与打开
  4. //在文件中打印结构体数组中的信息
  5. for(i=0;i<num;i++){
  6. print(i);
  7. cout<<endl;
  8. }
  9. //文件的关闭
  10. freopen("CON","w",stdout);
  11. //第二次遍历,控制台上打印信息
  12. for(i=0;i<num;i++){
  13. print(i);
  14. cout<<endl;
  15. }
  16. return;
  17. }

因为要求要把课程信息存在文件中,还要把课程信息打印在控制台上。所以我们把结构体数组遍历两遍,一次把信息写入文件.txt中,第二次打印在控制台上。

5.函数 void chaxun();

  1. void chaxun(){
  2. cout<<"你有以下选择:"<<endl;
  3. cout<<"1:按学分查询"<<endl;
  4. cout<<"2:按性质查询"<<endl;
  5. int id;
  6. cin>>id;
  7. if(id==1){
  8. double xuefen;
  9. cout<<"请输入你想查询的学分:";
  10. cin>>xuefen;
  11. xuefen_chaxun(xuefen);
  12. cout<<endl;
  13. }else
  14. if(id==2){
  15. string xingzhi;
  16. cout<<"请输入你想查询的性质:";
  17. cin>>xingzhi;
  18. xingzhi_chaxun(xingzhi);
  19. cout<<endl;
  20. }
  21. }

查询功能有两个:1.按学分查询 2.按课程性质查询

所以我们要让用户选择按哪个进行查询,然后按分支结构分支出两个函数。

6.函数 void xuefen_chaxun(double n);与void xingzhi_chaxun(string s);

  1. void xuefen_chaxun(double n){
  2. bool b=0;
  3. for(int k=0;k<num;k++){
  4. if(ke[k].xuefen==n){
  5. b=1;
  6. cout<<"已找到:"<<endl;
  7. print(k);
  8. }
  9. }
  10. if(b==0) cout<<"未找到"<<endl;
  11. }
  12. void xingzhi_chaxun(string s){
  13. bool b=0;
  14. for(int k=0;k<num;k++){
  15. if(s==ke[k].xingzhi){
  16. b=1;
  17. cout<<"已找到:"<<endl;
  18. print(k);
  19. }
  20. }
  21. if(b==0) cout<<"未找到"<<endl;
  22. }

这两个函数本质上都是遍历这个课程信息,然后进行信息比对,比对成功后,就打印课程信息。只不过一个是浮点数,一个是字符串。string的好处就是不用调用strcmp();直接用==即可进行比对。

这个程序的代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <fstream>
  4. using namespace std;
  5. void welcome();
  6. void print(int i);
  7. void luru(int k);
  8. void liulan();
  9. void chaxun();
  10. void xuefen_chaxun(double n);
  11. void xingzhi_chaxun(string s);
  12. typedef struct kemu{
  13. int bianhao;
  14. string mingcheng;
  15. string xingzhi;
  16. int zhongxueshi;
  17. int shoukexueshi;
  18. double xuefen;
  19. int kaishexueqi;
  20. } K;
  21. K ke[100];
  22. int num;
  23. int main(){
  24. welcome();
  25. char a;
  26. while(cout<<"请选择业务:",cin>>a){
  27. switch(a){
  28. case 'a':
  29. cout<<"请输入录入课程数:";
  30. cin>>num;
  31. for(int k=0;k<num;k++){
  32. luru(k);
  33. cout<<endl;
  34. }
  35. cout<<"录入成功"<<endl;
  36. break;
  37. case 'b':
  38. liulan();
  39. break;
  40. case 'c':
  41. chaxun();
  42. break;
  43. case 'd':
  44. return 0;
  45. }
  46. }
  47. return 0;
  48. }
  49. void welcome(){
  50. cout<<"欢迎来到选修课查询系统:"<<endl;
  51. cout<<"本系统提供以下业务:"<<endl;
  52. cout<<"a:课程录入"<<endl;
  53. cout<<"b:课程浏览"<<endl;
  54. cout<<"c:查询"<<endl;
  55. cout<<"d:退出"<<endl;
  56. }
  57. void print(int i){
  58. cout<<"课程编号:";printf("%4d\n",ke[i].bianhao);
  59. cout<<"课程名称:";printf("%10s\n",ke[i].mingcheng.c_str());
  60. cout<<"课程性质:";printf("%10s\n",ke[i].xingzhi.c_str());
  61. cout<<"总学时:";printf("%4d\n",ke[i].zhongxueshi);
  62. cout<<"授课学时:";printf("%4d\n",ke[i].shoukexueshi);
  63. cout<<"实验学分:";printf("%4.2f\n",ke[i].xuefen);
  64. cout<<"开设学期:";printf("%5d\n",ke[i].kaishexueqi);
  65. }
  66. void luru(int k){
  67. cout<<"请输入:"<<endl;
  68. cout<<"课程编号:";cin>>ke[k].bianhao;
  69. cout<<"课程名称:";cin>>ke[k].mingcheng;
  70. cout<<"课程性质:";cin>>ke[k].xingzhi;
  71. cout<<"总学时:";cin>>ke[k].zhongxueshi;
  72. cout<<"授课学时:";cin>>ke[k].shoukexueshi;
  73. cout<<"实验学分:";cin>>ke[k].xuefen;
  74. cout<<"开设学期:";cin>>ke[k].kaishexueqi;
  75. }
  76. void liulan(){
  77. int i;
  78. freopen("output.txt","w",stdout);
  79. for(i=0;i<num;i++){
  80. print(i);
  81. cout<<endl;
  82. }
  83. freopen("CON","w",stdout);
  84. for(i=0;i<num;i++){
  85. print(i);
  86. cout<<endl;
  87. }
  88. return;
  89. }
  90. void xuefen_chaxun(double n){
  91. bool b=0;
  92. for(int k=0;k<num;k++){
  93. if(ke[k].xuefen==n){
  94. b=1;
  95. cout<<"已找到:"<<endl;
  96. print(k);
  97. }
  98. }
  99. if(b==0) cout<<"未找到"<<endl;
  100. }
  101. void xingzhi_chaxun(string s){
  102. bool b=0;
  103. for(int k=0;k<num;k++){
  104. if(s==ke[k].xingzhi){
  105. b=1;
  106. cout<<"已找到:"<<endl;
  107. print(k);
  108. }
  109. }
  110. if(b==0) cout<<"未找到"<<endl;
  111. }
  112. void chaxun(){
  113. cout<<"你有以下选择:"<<endl;
  114. cout<<"1:按学分查询"<<endl;
  115. cout<<"2:按性质查询"<<endl;
  116. int id;
  117. cin>>id;
  118. if(id==1){
  119. double xuefen;
  120. cout<<"请输入你想查询的学分:";
  121. cin>>xuefen;
  122. xuefen_chaxun(xuefen);
  123. cout<<endl;
  124. }else
  125. if(id==2){
  126. string xingzhi;
  127. cout<<"请输入你想查询的性质:";
  128. cin>>xingzhi;
  129. xingzhi_chaxun(xingzhi);
  130. cout<<endl;
  131. }
  132. }

第二代系统:增加了在文件中读入课程信息:

 

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <fstream>
  4. #include <cstring>
  5. using namespace std;
  6. void welcome();
  7. void print(int i);
  8. void luru();
  9. void liulan();
  10. void chaxun();
  11. void xuefen_chaxun(double n);
  12. void xingzhi_chaxun(char *s);
  13. typedef struct kemu{
  14. int bianhao;
  15. char mingcheng[100];
  16. char xingzhi[100];
  17. int zhongxueshi;
  18. int shoukexueshi;
  19. double xuefen;
  20. int kaishexueqi;
  21. } K;
  22. K ke[100];
  23. int num=0;
  24. int main(){
  25. welcome();
  26. char a;
  27. while(cout<<"请选择业务:",cin>>a){
  28. switch(a){
  29. case 'a':
  30. luru();
  31. cout<<"录入成功"<<endl;
  32. break;
  33. case 'b':
  34. liulan();
  35. break;
  36. case 'c':
  37. chaxun();
  38. break;
  39. case 'd':
  40. return 0;
  41. }
  42. }
  43. return 0;
  44. }
  45. void welcome(){
  46. cout<<"欢迎来到选修课查询系统:"<<endl;
  47. cout<<"本系统提供以下业务:"<<endl;
  48. cout<<"a:课程录入"<<endl;
  49. cout<<"b:课程浏览"<<endl;
  50. cout<<"c:查询"<<endl;
  51. cout<<"d:退出"<<endl;
  52. }
  53. void print(int i){
  54. cout<<"课程编号:";printf("%4d\n",ke[i].bianhao);
  55. cout<<"课程名称:";printf("%10s\n",ke[i].mingcheng);
  56. cout<<"课程性质:";printf("%10s\n",ke[i].xingzhi);
  57. cout<<"总学时:";printf("%4d\n",ke[i].zhongxueshi);
  58. cout<<"授课学时:";printf("%4d\n",ke[i].shoukexueshi);
  59. cout<<"实验学分:";printf("%4.2f\n",ke[i].xuefen);
  60. cout<<"开设学期:";printf("%5d\n",ke[i].kaishexueqi);
  61. }
  62. void luru(){
  63. cout<<"请输入录入课程总数:";
  64. cin>>num;
  65. FILE *fp=fopen("input.txt","r");
  66. for(int i=0;i<num;i++){
  67. fscanf(fp,"%d %s %s %d %d %lf %d",&ke[i].bianhao,ke[i].mingcheng,ke[i].xingzhi,
  68. &ke[i].zhongxueshi,&ke[i].shoukexueshi,&ke[i].xuefen,&ke[i].kaishexueqi);
  69. }
  70. }
  71. void liulan(){
  72. int i;
  73. freopen("output.txt","w",stdout);
  74. for(i=0;i<num;i++){
  75. print(i);
  76. cout<<endl;
  77. }
  78. freopen("CON","w",stdout);
  79. for(i=0;i<num;i++){
  80. print(i);
  81. cout<<endl;
  82. }
  83. return;
  84. }
  85. void xuefen_chaxun(double n){
  86. bool b=0;
  87. for(int k=0;k<num;k++){
  88. if(ke[k].xuefen==n){
  89. b=1;
  90. cout<<"已找到:"<<endl;
  91. print(k);
  92. }
  93. }
  94. if(b==0) cout<<"未找到"<<endl;
  95. }
  96. void xingzhi_chaxun(char *s){
  97. bool b=0;
  98. for(int k=0;k<num;k++){
  99. if(strcmp(s,ke[k].xingzhi)==0){
  100. b=1;
  101. cout<<"已找到:"<<endl;
  102. print(k);
  103. }
  104. }
  105. if(b==0) cout<<"未找到"<<endl;
  106. }
  107. void chaxun(){
  108. cout<<"你有以下选择:"<<endl;
  109. cout<<"1:按学分查询"<<endl;
  110. cout<<"2:按性质查询"<<endl;
  111. int id;
  112. cin>>id;
  113. if(id==1){
  114. double xuefen;
  115. cout<<"请输入你想查询的学分:";
  116. cin>>xuefen;
  117. xuefen_chaxun(xuefen);
  118. cout<<endl;
  119. }else
  120. if(id==2){
  121. char xingzhi[100];
  122. cout<<"请输入你想查询的性质:";
  123. cin>>xingzhi;
  124. xingzhi_chaxun(xingzhi);
  125. cout<<endl;
  126. }
  127. }

 输出显示在文件output.txt中,也在控制台上显示。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/article/detail/41520
推荐阅读
相关标签
  

闽ICP备14008679号