《数据结构》课程设计学生选课系统设计_第1页
《数据结构》课程设计学生选课系统设计_第2页
《数据结构》课程设计学生选课系统设计_第3页
《数据结构》课程设计学生选课系统设计_第4页
《数据结构》课程设计学生选课系统设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计PAGE PAGE 19中南民族大学计算机科学学院计算机科学与技术专业 学号: 姓名 :题目:学生选课系统设计需求分析根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。通过课程设计,加深对C语言程序设计和数据结构课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性结构、树形结构

2、、图形结构)的逻辑结构、存储结构以及相关运算和应用。具体要求如下:采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。学生也可根据自己对题目的理解增加新的功能模块。系统以菜单界面方式工作,运行界面友好,演示程序以用户和计算机的对话方式进行。程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强。编程风格良好(包括缩进、空行、适当注释、变量名和函数名见名知意,程序容易阅读等); 假设某学期共有5门课,每门课程有四项基本信息:课程编号、课程名称、学分和选课人数。学生可自行选课,假设该学期共有8个学生,学生有学号、姓名、所选课程三种基本信息,学生选

3、课要满足每门课最多只能有3个学生选修,每个学生最多只能选2门课,试设计一个学生选课系统。学生选课系统要求具备以下功能:1系统以菜单方式工作2浏览所有的课程信息3浏览所有的学生选课情况4任意学生信息的查询和修改功能5学生选课功能(学生选课时要判断课程是否已经选满,同时还要判断学生是否已经选了2门课,若学生满足选课条件才能选课,注意同一门课一个学生只能选一次) 概要设计本程序中用到的所有数据类型的定义及含义数据类型:一维数组struct course int num; char subject10; int mark; int count; cour5=1,C+,3,0, 2,MATLAB,3,0

4、, 3,Math,5,0, 4,English,4,0, 5,Chinese,3,0; 课程信息struct student long num; char name10; char order110; char order210; stu8=20074001,guo,NULL,NULL, 20074002,yu,NULL,NULL, 20074003,su,NULL,NULL, 20074004,hua,NULL,NULL, 20074005,du,NULL,NULL, 20074006,su,NULL,NULL, 20074007,liu,NULL,NULL, 20074008,xu,NUL

5、L,NULL, ; 学生信息其余int, char等数据类型在各模块有不同含义,比较简单,不做赘述。主程序的流程以及各程序模块的功能要求及各自之间的层次(调用)关系void scan_1(struct course *p) 调用储存课程信息的结构体数组,输出所有课程信息void scan_2(struct student *p) 调用储存学生信息的结构体数组,输出所有学生信息void modify(struct student *p,struct course cour5) 分别调用储存课程信息和学生信息的结构体数组,输出任意一个学生的信息,并可以修改学生信息void select(struc

6、t student *p,struct course cour5)分别调用储存课程信息和学生信息的结构体数组,为任意一个学生进行选课void menu() 菜单函数void main()主函数 详细设计#include stdio.h#include conio.h#include string.h#include stdlib.h#include windows.hstruct course / 定义存储课程信息的结构体 int num; /课程号 char subject10; /课程名 int mark; /学分 int count; /已选人数 cour5=1,C+,3,0, 2,MA

7、TLAB,3,0, 3,Math,5,0, 4,English,4,0, 5,Chinese,3,0;void scan_1(struct course *p) /所有课程信息的浏览功能 system(cls); printf( 课程信息如下: n); for(p=cour;pnum,p-subject,p-mark,p-count); struct student / 定义存储学生信息的结构体 long num; /学号 char name10; /姓名 char order110; /所选课程1 char order210; /所选课程2 stu8=20074001,guo,NULL,NU

8、LL, 20074002,yu,NULL,NULL, /选课为空显示NULL 20074003,su,NULL,NULL, 20074004,hua,NULL,NULL, 20074005,du,NULL,NULL, 20074006,su,NULL,NULL, 20074007,liu,NULL,NULL, 20074008,xu,NULL,NULL, ;void scan_2(struct student *p) /所有学生信息的浏览功能 system(cls); printf( 学生选课情况如下:n); for(p=stu;pnum,p-name,p-order1,p-order2);

9、void modify(struct student *p,struct course cour5) /任意学生信息的查询和修改 int s; int g; char b;char k10; long n; long m;int i;int j; char name120; system(cls); printf(请输入学号(20074001-20074008):); scanf(%d,&n); for(p=stu;pnum) /找到对应的学生 system(cls); printf(nnnn 该学生信息如下nnn); printf( 学号-%d 姓名-%s 课程1-%s 课程2-%snn,p

10、-num,p-name,p-order1,p-order2); printf(nA.修改 退出请按A a外任意字母键n); /不区分大小写 scanf(%s,&b); if(b=a|b=A) printf(n1.修改学号 2.修改姓名 3.修改所选课程n); /修改菜单 scanf(%d,&s); if(s=1) printf( n 学号修改为:n); /修改学号 scanf(%d,&m); p-num=m; system(cls); printf(nnnnnn 修改后如下:n); printf( 学号-%d 姓名-%s 课程1-%s 课程2-%snn,p-num,p-name,p-order

11、1,p-order2); if(s=2) printf( n 姓名修改为:n); /修改姓名 scanf(%20s,name1); strcpy(p-name,name1); system(cls); printf(nnnnnn 修改后如下:nn); printf( 学号-%d 姓名-%s 课程1-%s 课程2-%snn,p-num,p-name,p-order1,p-order2); if(s=3) system(cls); printf(n输入你想修改的课程:区分大小写n);scanf(%s,&k); /区分大小写if (strcmp(p-order1,k)=0) system(cls);

12、 printf(n1.C+ 2.MATLAB 3.Math 4.English 5.Chinesen); printf(n你想修改为(1-5):n); scanf(%d,&g); for(i=0;i=3 ) system(cls); printf(nn 该课程已被选满n); /课程选满,返回主菜单 else if(strcmp(p-order2,courg-1.subject)=0) printf(nn 你已选过这门课nn); /重选,返回主菜单 else strcpy(p-order1,courg-1.subject); courg-1.count+; for(j=0;jnum,p-name

13、,p-order1,p-order2); else if(strcmp(p-order2,k)=0) system(cls); printf(n1.C+ 2.MATLAB 3.Math 4.English 5.Chinesen); printf(n你想修改为(1-5):n); scanf(%d,&g); for(i=0;i=3 ) printf(nn 该课程已被选满nn); /已选满 else if(strcmp(p-order1,courg-1.subject)=0) printf(nnn 你已选过这门课nn); /重选 else strcpy(p-order2,courg-1.subjec

14、t); courg-1.count+; for(j=0;jnum,p-name,p-order1,p-order2); else printf(nn您还没选这门课或拼写错误nn); void select(struct student *p,struct course cour5) /学生选课功能 long n; int a;int b; int t=0;int u=0;int i; system(cls); printf(请输入学号(20074001-20074008):); scanf(%d,&n); for(p=stu;pnum) /找到对应学生 system(cls); if(strc

15、mp(p-order1,NULL)!=0) /第一门课不为空 t=1; else system(cls); printf(nnnnnn 请选您的第一门课 提示:您最多只能选二门课 nn); printf(n1.C+ 2.MATLAB 3.Math 4.English 5.Chinesenn); printf(n请选第一门课:不选请按1-5外任意数字键返回nn); scanf(%d,&a); /输入所选课程编号 for(i=0;i=3 ) printf(nn 该课程已被选满n); /课程选满,返回主菜单 else if(strcmp(p-order2,coura-1.subject)=0) pr

16、intf(nnn 你已选过这门课n); /重选,返回主菜单 else strcpy(p-order1,coura-1.subject); /选课成功 coura-1.count+; system(cls); printf(nnnnnn 学生信息:n); printf( 学号-%d 姓名-%s 课程1-%s 课程2-%snn,p-num,p-name,p-order1,p-order2); if(strcmp(p-order2,NULL)!=0) /第二门课不为空 u=1; else printf(nnnnnn 请选您的第二门课 提示:您最多只能选二门课 nn); printf(n1.C+ 2.

17、MATLAB 3.Math 4.English 5.Chinesenn); printf(n请选第二门课:不选请按1-5外任意数字键返回nn); scanf(%d,&b); for(i=0;i=3) printf(nn 该课程已被选满n); /已选满,返回主菜单 else if(strcmp(p-order1,courb-1.subject)=0) printf(nnn 你已选过这门课n); /重选,返回主菜单 else strcpy(p-order2,courb-1.subject); courb-1.count+; system(cls); printf(nnnnnn 学生信息:n); /

18、成功选课 printf( 学号-%d 姓名-%s 课程1-%s 课程2-%snn,p-num,p-name,p-order1,p-order2); if(u=1&t=1) printf(n您已选满,若想修改请进入菜单3n); /已选满,返回主菜单 void menu() /菜单函数 int n;printf(tt * 欢迎来到选课系统 *nn);printf(tt *菜单 *nn); printf(tt * 1 浏览课程信息 *nn); printf(tt * 2 浏览学生选课情况 *nn);printf(tt * 3 学生信息查询和修改 *nn); printf(tt * 4 学生选课 *n

19、n); printf(tt * 5 退出 *nn); printf(请选择(1-5): bb); scanf(%d,&n); switch(n) /用switch语句,建立菜单 case 1:scan_1(cour);break; case 2:scan_2(stu); break;case 3:modify(stu,cour); break;case 4:select(stu,cour);break;case 5:exit(0); void main() /主函数 for(;) menu(); /调用菜单函数调试分析 本试验调试最主要是靠输入的数据,如果输入者按照程序 提示的要求输入的话,程序会正常运行,得到准确的数据。但如果输入者,在提示输入整数的情况下输入字母,或在提示输入字母的情况下输入整数的话,会出现无限循环,必须退出,然后重新进入。这样浪费了时间。改进方法是:在有的情况下,可以把字母或整数统统按字符串的形式输入,然后进行验证,这样可以减少错误数量。还有就是有的功能,比如修改,当改过一项内容后,就会返回菜单栏,如果想改两门,则需重新进入,这样有点麻烦,可以设置循环的次数,可以重复修改。本次试验,每个模块运行过后就会返回菜单栏,比较省事。本次主要运用数组,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论