c++课程设计-学生选修课选课系统
c语言课程设计学生选课系统

c语言课程设计 学生选课系统一、课程目标知识目标:1. 学生能理解C语言在开发学生选课系统中的应用,掌握基本的数据结构(如结构体、数组、链表)和文件操作相关知识。
2. 学生能运用C语言实现学生选课系统的基本功能,如学生信息管理、课程信息管理、选课操作等。
3. 学生能理解并掌握C语言中的模块化编程思想,将学生选课系统分解为多个函数,提高代码的可读性和可维护性。
技能目标:1. 学生能运用C语言编写、调试和运行学生选课系统,具备一定的编程实践能力。
2. 学生能通过团队协作,共同完成一个完整的学生选课系统项目,提高沟通与协作能力。
3. 学生能运用所学知识,对现有学生选课系统进行优化和改进,提高系统性能。
情感态度价值观目标:1. 学生通过本课程的学习,培养对计算机编程的兴趣和热情,树立学习C语言的自信心。
2. 学生在团队协作中,学会尊重他人意见,培养合作精神和团队意识。
3. 学生能够认识到编程在解决实际问题中的价值,提高将所学知识应用于实际生活的意识。
课程性质:本课程为C语言编程实践课程,旨在让学生通过动手实践,掌握C 语言编程技能,并运用所学知识解决实际问题。
学生特点:学生已具备一定的C语言基础,具备基本编程能力,但缺乏实际项目经验。
教学要求:注重理论与实践相结合,强调编程实践,培养学生解决实际问题的能力。
通过团队协作,提高学生的沟通与协作能力。
在教学过程中,关注学生的个体差异,因材施教,使每位学生都能在原有基础上得到提高。
二、教学内容1. 数据结构基础:回顾结构体、数组、链表等基本数据结构,讲解其在学生选课系统中的应用。
相关教材章节:第3章 数据类型与表达式,第4章 控制结构,第5章 函数,第6章 数组与字符串,第7章 指针与结构体。
2. 文件操作:介绍文件读写、文件管理等基本操作,为学生选课系统提供数据持久化支持。
相关教材章节:第10章 文件操作。
3. 模块化编程:讲解模块化编程思想,引导学生将学生选课系统分解为多个函数,提高代码的可读性和可维护性。
学生选课系统c课程设计

学生选课系统c 课程设计一、教学目标本课程旨在让学生掌握学生选课系统C的基本原理和使用方法。
知识目标包括了解学生选课系统的功能、结构和常用技术,理解面向对象设计的基本概念和方法。
技能目标包括能够使用学生选课系统C进行课程选择和排课,能够进行简单的系统设计和优化。
情感态度价值观目标包括培养学生对编程和计算机科学的兴趣和热情,提高学生解决问题的能力和创新精神。
二、教学内容本课程的教学内容主要包括学生选课系统C的基本原理、系统结构和常用技术,面向对象设计的基本概念和方法,以及学生选课系统C的实践应用。
具体包括以下几个部分:1.学生选课系统C的基本原理:介绍学生选课系统C的定义、功能和特点,让学生了解学生选课系统C的基本概念。
2.学生选课系统C的系统结构:讲解学生选课系统C的组成部分,包括数据库、服务器和客户端等,让学生了解学生选课系统C的架构和运行机制。
3.学生选课系统C的常用技术:介绍学生选课系统C中常用的技术,如SQL、Java等,让学生掌握学生选课系统C的开发和实现方法。
4.面向对象设计的基本概念和方法:讲解面向对象设计的基本原则和方法,如封装、继承和多态等,让学生掌握面向对象设计的思维方式和实际应用。
5.学生选课系统C的实践应用:通过实际操作,让学生学会使用学生选课系统C进行课程选择和排课,培养学生的实际操作能力。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。
包括:1.讲授法:通过讲解学生选课系统C的基本原理、系统结构和常用技术,让学生掌握基本概念和知识。
2.讨论法:通过学生进行小组讨论,引导学生思考和探讨学生选课系统C的实际应用问题和解决方案。
3.案例分析法:通过分析典型案例,让学生了解学生选课系统C的实际应用场景和设计方法。
4.实验法:通过实际操作,让学生学会使用学生选课系统C进行课程选择和排课,培养学生的实际操作能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选择合适的教材,为学生提供系统的学习资料。
学生选课系统C语言程序代码

#include<stdio.h>#include<stdlib.h>struct couse * head1;struct student * head2;struct couse//课程信息结构体{int num1;char name1[20];int score;int nelepeo;//课程已选人数int Melepeo;//课程人数上限struct couse * next;};struct student//学生信息结构体{int num2;char name2[20];int nelenum[50];//已选课程编号int nelen;//已选课程数量struct student * next;};void keyboardc()//录入课程子函数(从键盘录入){struct couse *p1,*p2;N1=0;p1=p2=(struct couse*)malloc(sizeof(struct couse)); printf("\n课程编号\t课程名称\t学分\t课程人数上限\n");scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1 ->Melepeo);p1->nelepeo=0;head1=NULL;while(p1->num1!=0&&p1->num1!='#'){N1=N1+1;if(N1==1)head1=p1;else p2->next=p1;p2=p1;p1=(struct couse * )malloc(sizeof(struct couse));scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1 ->Melepeo);p1->nelepeo=0;}p2->next=NULL;}void inputc()//录入课程主函数{int i;printf("\n录入课程信息\n");printf("\n1.从键盘录入\n"); printf("\n2.返回主菜单\n");printf("\n请选择编号(1~3):\n");scanf("%d",&i);switch(i){case(1):keyboardc();break;case(2):break;}}void insertc(struct couse *incouse)//课程信息增加子函数{struct couse *p0,*p1,*p2;p1=head1;p0=incouse;if(head1==NULL){head1=p0;p0->next=NULL;}else{while((p0->num1>p1->num1)&&(p1->next!=NULL)) {p2=p1;p1=p1->next;}if(p0->num1 <= p1->num1){if(head1==p1) head1=p0;else p2->next=p0;p0->next=p1;}else{p1->next=p0;p0->next=NULL;}}N1=N1+1;}void delc(int num1)//课程信息删除子函数{struct couse *p1,*p2;if(head1==NULL){printf("\n没有课程,无法删除!\n"); goto end;}p1=head1;while(num1!=p1->num1 && p1->next!=NULL) {p2=p1;p1=p1->next;}if(num1==p1->num1){if(p1==head1) head1=p1->next;else p2->next=p1->next;printf("\n已删除该编号课程!\n");N1=N1-1;}else printf("\n无该编号的课程!\n");end:;}void managementc()//课程信息管理主函数{struct couse * incouse;int i,num1;printf("\n课程管理\n");printf("\n1.新增课程\n");printf("\n2.删除课程\n");printf("\n3.返回主菜单\n");printf("\n请选择编号(1~3):\n");scanf("%d",&i);switch(i){case(1):{incouse=(struct couse*)malloc(sizeof(struct couse));printf("\n课程编号\t课程名称\t学分\t课程人数上限\n");scanf("%d%s%d%d",&incouse->num1,incouse->name1,&inc ouse->score,&incouse->Melepeo);incouse->nelepeo=0;insertc(incouse);break;}case(2):{printf("\n请输入要删除课程的编号:\n"); scanf("%d",&num1);delc(num1);break;}case(3):break;}}void keyboards()//录入学生信息子函数(从键盘录入){int i;struct student *p1,*p2;N2=0;p1=p2=(struct student *)malloc(sizeof(struct student));printf("\n学生学号\t学生姓名\n");scanf("%d%s",&p1->num2,p1->name2);p1->nelen=0;for(i=0;i<20;i++) p1->nelenum[i]=0;head2=NULL;while(p1->num2!=0){N2=N2+1;if(N2==1)head2=p1;else p2->next=p1;p2=p1;p1=(struct student * )malloc(sizeof(struct student));scanf("%d%s",&p1->num2,p1->name2);p1->nelen=0;for(i=0;i<20;i++) p1->nelenum[i]=0;}p2->next=NULL;}void inputs()//录入学生信息主函数{int i;printf("\n录入学生信息\n");printf("\n1.从键盘录入\n");printf("\n2.返回主菜单\n");printf("\n请选择编号(1~2):\n");scanf("%d",&i);switch(i){case(1):keyboards();break;case(2):break;}}void inserts(struct student * incouse)//学生信息增加子函数{struct student *p0,*p1,*p2;p1=head2;p0=incouse;if(head2==NULL){head2=p0;p0->next=NULL;}else{while((p0->num2 > p1->num2) && (p1->next!=NULL)){p2=p1;p1=p1->next;}if(p0->num2 <= p1->num2){if(head2==p1) head2=p0;else p2->next=p0;p0->next=p1;}else{p1->next=p0;p0->next=NULL;}}N2=N2+1;}void dels(int num2)//学生信息删除子函数{struct student *p1,*p2;if(head2==NULL){printf("\n没有该学生信息,无法删除!\n"); goto end;}p1=head2;while(num2!=p1->num2 && p1->next!=NULL){p2=p1;p1=p1->next;}if(num2==p1->num2){if(p1==head2) head2=p1->next;else p2->next=p1->next;printf("\n已删除该学生信息!\n");N2=N2-1;}else printf("\n无该学号的学生!\n");end:;}void managements()//学生信息管理主函数{struct student * incouse;int i,num2;printf("\n学生信息管理\n");printf("\n1.新增学生信息\n");printf("\n2.删除学生信息\n");printf("\n3.返回主菜单\n");printf("\n请选择编号(1~3):\n");scanf("%d",&i);switch(i){case(1):{incouse=(struct student*)malloc(sizeof(struct student));incouse->nelen=0;incouse->nelenum[0]=0;printf("\n学生学号\t学生姓名\n");scanf("%d%s",&incouse->num2,incouse->name2);inserts(incouse);break;}case(2):{printf("\n请输入要删除学生的学号:\n"); scanf("%d",&num2);dels(num2);break;}case(3):break;}}void elect(struct student * s)//学生选课子函数(进行选课){struct couse * p;int num1,i;printf("\n请输入要选课的编号:\n");scanf("%d",&num1);for(i=0;s->nelenum[i]!=0;i++);s->nelenum[i]=num1;(s->nelen)++;p=head1;while(p->num1!=num1) p=p->next;(p->nelepeo)++;}void cheak()//学生选课子函数(查询可选课程){char e;struct couse * c;struct student * s;int num2,i,j=0,t=0;printf("\n请输入你的学号:\n");scanf("%d",&num2);s=head2;while(s->num2!=num2 && s->next!=NULL) s=s->next; if(s->num2!=num2){printf("\n不存在你的信息,请进入主菜单录入你的信息!\n");goto end;}c=head1;printf("\n你的可选课程编号:\n");while(c!=NULL){for(t=0,i=0;s->nelenum[i]!=0;i++){if(c->num1==s->nelenum[i]) t=1;}if(t==0 && (c->nelepeo!=c->Melepeo)){printf("%d ",c->num1);j++;}c=c->next;}if(j==0){printf("\n你已选完所有课程,无法再多选!\n"); goto end;}printf("\n选课(y/n)?:\n");getchar();e=getchar();i=0;while(e=='y'){elect(s);printf("\n继续选课(y/n)?:\n");getchar();e=getchar();}end:;}void back(struct student * p)//退选课程{struct couse * p1;int num1,i,j;printf("\n请输入你要退掉的课程编号:\n");scanf("%d",&num1);p1=head1;while(p1->num1!=num1) p1=p1->next;for(i=0;p->nelenum[i]!=num1;i++);for(j=i;p->nelenum[j]!=0;j++)p->nelenum[j]=p->nelenum[j+1];p->nelenum[--j]=0;(p1->nelepeo)--;printf("\n退课成功!\n");}void hcheak()//学生选课子函数(查询已选课程){char c;struct couse * p0;struct student * p;int num2,i,f=0;printf("\n请输入学号:\n");scanf("%d",&num2);p=head2;while(p->num2!=num2 && p!=NULL) p=p->next;if(p==NULL){printf("\n不存在你的信息,请回主菜单录入信息:\n");goto end;}printf("\n已选课程编号:\n");if(p->nelenum[0]==0){printf("\n你还没选课!\n");goto end;}for(i=0;p->nelenum[i]!=0;i++){printf("%d\n",p->nelenum[i]);p0=head1;while(p0->num1!=p->nelenum[i]) p0=p0->next; f=f+p0->score;}printf("\n总学分:%d\n",f);printf("\n是否进行退课(y/n)?\n");getchar();c=getchar();while(c=='y'){back(p);printf("\n继续退课(y/n)?"); getchar();c=getchar();(p->nelen)--;}end:;}void elective()//学生选课主函数{int i;printf("\n学生选课\n");printf("\n1.查询可选课程\n");printf("\n2.查询已选课程\n");printf("\n3.返回主菜单\n");printf("\n请输入(1~3):\n");scanf("%d",&i);switch(i){case(1):cheak();break;case(2):hcheak();break;case(3):break;}}void listc()//查看课程信息{struct couse * p;p=head1;printf("\n课程编号课程名称学分课程已选人数课程人数上限\n");while(p!=NULL){printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->s core,p->nelepeo,p->Melepeo);p=p->next;}}void lists()//查看学生信息{struct student * p;p=head2;printf("\n学生学号学生姓名已选课程数量\n"); while(p!=NULL){printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen); p=p->next;}}void store()//系统信息查看主函数{int i;printf("\n系统信息查看\n");printf("\n1.查看课程信息\n");printf("\n2.查看学生信息\n");printf("\n3.返回主菜单\n");printf("\n请输入编号(1~3):\n");scanf("%d",&i);switch(i){case(1):listc();break;case(2):lists();break;case(3):break;}}int main()//主函数{system("color f0");int i;start:printf("\n******************************欢迎使用学生选课系统******************************\n");printf("\n 菜单 \n");printf("\n 1.录入课程信息 \n");printf("\n 2.课程信息管理 \n");printf("\n 3.录入学生信息 \n");printf("\n 4.学生信息管理 \n");printf("\n 5.进入选课程序 \n");printf("\n 6.系统信息查看 \n");printf("\n 7.退出选课系统 \n");printf("\n☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); printf("\n请输入菜单选项编号(1~7):\n");scanf("%d",&i);if(i<1 || i>7){printf("\n输入错误,请重输:\n");goto start;}switch(i){case(1):{system("cls");//清屏函数inputc();goto start;break;}case(2):{system("cls"); managementc(); goto start;break;}case(3):{system("cls"); inputs();goto start;break;}case(4):{system("cls"); managements(); goto start;break;}case(5):{system("cls");elective();goto start;break;}case(6):{system("cls");store();goto start;break;}case(7):{system("cls");printf("\n感谢使用本系统!再见!\n"); }}return(0);}。
C语言选课管理系统课程设计

C语言选课管理系统课程设计一、教学目标本课程旨在让学生掌握C语言选课管理系统的开发方法,培养其编程能力和问题解决能力。
具体目标如下:1.知识目标:学生能够理解C语言的基本语法、数据结构和常用算法;掌握面向对象编程思想。
2.技能目标:学生能够使用C语言进行程序设计,独立完成选课管理系统的开发;具备调试和优化程序的能力。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,使其认识到编程在实际应用中的重要性,提高其创新精神和团队合作意识。
二、教学内容本课程的教学内容主要包括C语言基础知识、数据结构、算法、面向对象编程和选课管理系统的设计与实现。
具体安排如下:1.C语言基础知识:介绍C语言的基本语法、变量、运算符、控制结构等。
2.数据结构:讲解数组、链表、栈、队列、树等基本数据结构及其应用。
3.算法:学习常用排序算法、查找算法、递归算法等,培养学生的算法思维。
4.面向对象编程:介绍类、对象、封装、继承、多态等基本概念,并学会使用面向对象的方法解决问题。
5.选课管理系统设计与实现:分析系统需求,设计系统架构,编写功能模块,完成系统集成。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:用于讲解基本概念、语法和算法,使学生掌握理论知识。
2.讨论法:学生针对案例进行分析,培养其问题解决能力和团队合作精神。
3.案例分析法:分析实际项目案例,使学生学会将理论知识应用于实际问题。
4.实验法:让学生动手编写代码,培养其编程能力和实践能力。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的教材,如《C程序设计原理与应用》、《C++ Primer》等。
2.参考书:提供相关领域的经典著作,如《算法导论》、《数据结构与算法分析》等。
3.多媒体资料:制作课件、教学视频等,丰富教学手段,提高教学质量。
4.实验设备:保证学生有足够的实践机会,提高其编程能力和实践能力。
C++程序设计源代码 学生选课系统

I
目录
第一章 设计题目的内容、任务及具体要求 ..................................1 第二章 总体设计思路 ....................................................2
2.1 程序功能 ........................................................... 2 2.2 模块关系 ........................................................... 2 2.3 总体框图 ............................................................ 3 第三章 功能模块的具体设计 ..............................................4 3.1 主函数模块的设计 ................................................... 4 3.2 显示课程信息模块的设计 ............................................. 7 3.3 查询模块模块的设计 ................................................. 8 3.4 增加模块的设计 ..................................................... 9 3.5 删除模块模块的设计 ................................................ 13 3.6 修改模块模块的设计 ................................................ 14 3.7 选课模块的设计 .................................................... 15 3.8 显示选课情况模块的设计 ............................................. 17 第四章 功能模块的调试及测试 ...........................................18 4.1 登陆界面和主菜单界面的显示 ........................................ 18 4.2 查询所有课程信息的显示结果 ........................................ 19 4.3 查询单个课程信息的显示结果 ........................................ 19 4.4 添加课程信息的显示结果 ............................................ 20 4.5 删除和修改课程信息的显示结果 ...................................... 20 4.6 选课的显示结果 .................................................... 21 4.7 查询选课情况的显示结果 ............................................ 22 4.8 退出 .............................................................. 22 总结 ..................................................................23 致 谢 ................................................................24 参考资料:............................................................. 25 附程序清单............................................................. 26
C语言课程设计学生选课系统

C语言课程设计学生选课系统题目一、学生选课管理系统目录第一部分:课程设计名称、目的、要求 ..... 第二部分:程序总体设计思路 ................... 第三部分:程序功能划分、图示及流程图.. 第四部分:程序设计数据、运行结果......... 第五部分:程序的优缺点 .......................... 第六部分:心得体会................................. 第七部分:附录(源程序)....................... 第八部分:附录(参考文献) ...................第一部分:课程设计名称、目的、要求名称:学生选修课程系统设计目的:运用C语言提高解决实际问题的能力实验环境:Microsoft Visual C++ 6.0内容:假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。
【功能】系统以菜单方式工作课程信息录入功能(课程信息用文件保存)--输入课程信息浏览功能--输出查询功能:(至少一种查询方式)--算法按学分查询按课程性质查询学生选修课程(可选项)第二部分:程序总体设计思路由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。
具体的设计思路如下:程序的要求是设计学生选修课管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。
首先,考虑到程序的数据输入,可以设置一个管理员登陆选项,通过该选项进入管理员界面,进行选修课的录入和修改操作,最后将录入的课程保存到相应的文件中。
然后定义各种函数的功能包括查看,查询,删除等。
另一个为学生登陆界面,该界面学生可以进行课程选择和浏览查询等操作。
在进行该操作之前需要对管理员保存的文件进行读取,然后对其中的内容进行查询等,在学生选好课程以后,可以将其选好的课程保存于相应的文件中,以便下次进行修改。
学生选课管理系统c课程设计

学生选课管理系统c 课程设计一、课程目标知识目标:1. 让学生理解学生选课管理系统的基本概念和功能,掌握系统设计的基本原理。
2. 使学生掌握数据库的基本操作,如查询、插入、删除和更新数据。
3. 帮助学生了解软件开发流程,熟悉系统设计、编码、测试等环节。
技能目标:1. 培养学生运用所学知识,独立设计并实现一个简单的学生选课管理系统。
2. 提高学生分析问题和解决问题的能力,学会运用数据库技术解决实际应用问题。
3. 培养学生的团队协作能力,学会在项目中进行有效沟通和分工合作。
情感态度价值观目标:1. 培养学生积极的学习态度,激发学生对计算机科学的兴趣和热情。
2. 培养学生的创新意识和实践能力,鼓励学生勇于尝试,敢于挑战。
3. 增强学生的责任心,让学生明白系统设计的重要性,关注用户需求,为用户带来更好的体验。
本课程针对高年级学生,课程性质为理论与实践相结合。
在教学过程中,注重培养学生的实际操作能力和解决问题的能力。
结合学生特点和教学要求,将课程目标分解为具体的学习成果,以便进行后续的教学设计和评估。
通过本课程的学习,使学生能够掌握学生选课管理系统设计的相关知识和技能,为今后从事软件开发和数据库管理等相关工作打下坚实基础。
二、教学内容1. 学生选课管理系统的基本概念与功能- 系统需求分析- 功能模块划分2. 数据库基础知识- 数据库设计原则- 数据表创建与维护- 数据查询、插入、删除和更新操作3. 系统设计- 系统架构设计- 界面设计- 数据库连接与操作4. 编程实现- 编程语言选择(如Java、Python等)- 系统功能编码- 代码调试与优化5. 系统测试与维护- 测试方法与策略- 常见问题分析与解决- 系统维护与升级6. 项目实践- 团队协作与分工- 项目进度管理- 系统部署与展示教学内容根据课程目标制定,涵盖学生选课管理系统设计的相关知识。
本课程采用教材相关章节,结合实际案例,保证教学内容的科学性和系统性。
课程信息管理系统c语言

课程信息管理系统c语言课程信息管理系统(C语言)一、引言课程信息管理系统是一种用来管理和组织课程信息的软件系统。
它能够对教学计划、课程表、学生选课等进行管理,帮助学校、教育机构或教师高效地管理课程信息。
本文将通过介绍课程信息管理系统的功能、特点和实施过程,详细阐述C语言在该系统中的应用。
二、功能介绍1. 学生管理:该系统能够记录学生的个人信息,如学号、姓名、班级等,并能进行学生选课管理,包括选课、退课等操作。
2. 课程管理:系统可以管理各门课程的信息,如课程编号、课程名称、学分等,并能进行课程安排,制定教学计划。
3. 教师管理:系统可以记录教师的基本信息,提供教师选课、授课安排等功能。
4. 成绩管理:系统能够记录学生的各科成绩,并提供成绩查询、统计等功能,方便学生和教师进行学业评估。
5. 课程评价:系统可以记录学生对课程的评价和反馈,帮助学校和教师改进教学质量。
三、特点和优势1. 数据集中管理:课程信息管理系统将学生、教师、课程等信息集中管理,方便快捷,减少重复工作。
2. 数据安全性高:系统采用数据库来存储和管理数据,确保数据的安全性和完整性。
3. 操作简便:系统界面友好,操作简单明了,即使对计算机操作不熟悉的教师和学生也能够轻松上手。
4. 信息共享:系统支持信息共享,学生、教师和管理者可以通过系统查询相关信息,提高工作效率。
5. 数据分析功能:系统能够对学生选课情况、成绩分布等进行统计和分析,为教学改革提供数据支持。
四、实施过程1. 需求分析:通过与学校、教师和学生的沟通,明确系统的需求和功能。
2. 系统设计:根据需求分析的结果,设计系统的数据库结构、界面和功能模块。
3. 编码实现:使用C语言编写相应的代码,实现系统的各个功能模块。
4. 测试调试:对系统进行功能测试和性能测试,确保系统的稳定性和可靠性。
5. 上线部署:将系统部署到服务器上,并进行相关的数据迁移和备份工作。
6. 培训和维护:对教师和学生进行系统培训,并进行后期的系统维护和更新。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生选修课选课系统目录1 前言 02 需求分析 (1)编写目的 (1)需求概述 (1)需求说明 (1):开发环境 (1)3 总体设计 (2)功能模块图 (2)流程图 (3)类的设计图 (4)4 各功能模块设计 (6)整体设计 (6)主要的功能函数设计 (6)|5 系统调试 (7)6 总结与体会 (13)总结 (13)编写程序中遇到的问题及解决办法 (13)参考文献 (14)附录源程序 (15)!须眉原作1 前言随着计算机的普及,各高校均采用计算机进行学生选课。
学生选修课系统主要包含选修课管理系统及学生选课系统两部分。
学生选修课系统一般需要有管理员管理选修课课程,然后学生对经过管理员操作后的选修课进行选课。
选修课管理系统由管理员登录,对当前所有选修课课程进行管理操作。
学生选课系统则是由学生登录,学生可以查看由管理员整理好的所有选修课,并从显示出的选修课中选择自己要选择的课程。
管理员管理选修课实质是对后台选修课库中的选修课信息进行操作,可以在库中添加课程或删除课程。
学生选课的实质即是先打印出后台选修课库中所有选修课信息以供选择,选择课程即是对后台学生信息库里的学生信息进行修改。
2 需求分析编写目的(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题;(4)通过编写此系统,实现选修课系统的基本功能。
需求概述(1)系统中包括两个登陆身份(管理员与学生),并对应不同的功能;(2)对于管理员,此系统具有添加、删除、查看选修课等功能;(3)对于学生,此系统具有选课、查询等功能需求说明此系统可以实现学生选课,管理员管理课程的基本功能开发环境使用Visual C++编程软件3 总体设计功能模块图(1)学生学生身份有两个功能,分别是选课与查看个人信息。
如图所示。
图学生功能模块图(2)管理员管理员可以对选修课课程进行管理。
如下图所示。
图管理员功能模块图流程图进入系统后可以选择以学生身份或者管理员身份登录。
学生登录需要输入个人的学号及姓名,成功登录后可以选课或查询个人信息。
管理员的登录需要输入密码,成功登录后则可以对当前所有的选修课进行管理操作,可添加新选修课或删除已有的选修课。
详细操作流程如下图所示。
图流程图类的设计图(1)Course类Course类即选修课课程类。
数据成员分别是:课程编号、课程名称、课程类型、开课时间、授课学时、实验学时、总学时以及学分。
成员函数则包含所有数据成员的get函数,用以获取数据成员的值,set函数用来修改课程,print 函数则是打印课程的信息。
如下图所示。
Courseid: char *name: char *nature: char *date: char *shours: intahours: intzhours: intscore: doublescore: doublegetId(): char *getName(): char*getNature(): char*getDate(): char*getAhours(): intgetShours(): intgetZhours(): intgetScore(): doubleset(char *a, char *b, char *c, char *d, int e, int f, double g):voidprint(): void图 Course类(2)Student类Student类即学生类。
其中包含了学生的学号、学生姓名、所选的两门课程及两门选修课课程的总学分。
setId和setName是用来修改相关成员的值,getName获取学生的姓名,print函数用来打印学生的相关信息,个selectCourse 则是用来选课。
如下图所示。
图 Student类4 各功能模块设计整体设计对于学生和选修课,我们分别定义了相应的类Student和类Course,其间的关系就是学生类中有两个选修课类对象成员。
而对于管理员我们并没有单独去定义类,因为管理员只是对选修课进行操作,程序中并不需要访问管理员的信息。
为了方便对选修课进行管理及多位学生的登录,我们定义了一个选修课数组和学生数组。
主要的功能函数设计(1)选课函数void selectCourse(Student s1[10], Course c1[M], int s_num1)对当前学生对象进行操作,覆盖其选修课对象成员c1或c2,即学生的选课。
(2)两种输出所需选修课函数按学分输出选修课函数 void selectScore(Course c1[M])按类型输出选修课void selectNature(Course c1[M])对传递进来的选修课数组进行扫描,输出符合要求的选修课。
(3)选修课排序函数void xu(Course c1[M])使用冒泡排序法对选修课数组进行编号从小到大的排序。
(4)主菜单函数void menu(Course c1[6], Student s1[10])所有菜单循环都在其中,调用其他函数来实现具体功能。
5 系统调试1.系统主界面进入系统主界面后可以选择登录身份或退出程序。
如图所示。
图系统主界面2.选修课管理系统图选择登录身份为管理员,默认密码123,输入-1可返回图界面。
密码输入正确后可进入管理员登录系统。
如图所示。
图选修课管理系统3.按学分查看选修课图选择查看选修课,可以查看当前所有的选修课课程的相关信息。
可以选择不同的输出方式:按学分查询、按类型查询、显示全部。
选择按学分查询,在选择,可打印当前所有课程中学分为的课程信息。
如图所示。
图按学分查看选修课4.查询全部选修课查看选修课功能中可以选择显示全部,即罗列出当前所有的选修课课程信息。
如图所示。
图查询全部选修课图选择添加选修课,可以添加一门新的选修课,然后按要求输入课程信息。
如图所示。
图管理员添加选修课6.添加后的选修课信息添加选修课后选择返回上一层,再选择显示全部选修课可以看到已新增的选修课已添加成功。
如图所示。
图添加后的选修课图选择删除选修课。
输入要删除的选修课的编号,即可删除相应的选修课。
如图所示。
图管理员删除选修课8.删除后的选修课信息删除选修课后选择返回上一层,再选择显示全部选修课可以看到已删除的选修课已删除成功。
如图所示。
图删除后的选修课信息9.学生选课系统图选择学生,然后输入学生的姓名及学号就能进入学生选课系统。
如图所示。
图学生选课系统10.学生选课以学生身份登录成功后,可以选择选课或是查询个人信息。
选择选课可以选择按学分选课、按课程类型选课或显示全部课程再进行选课。
选择按学分选课,再选艺术类,再输入课程编号即可选择相应课程。
如图所示。
图学生选课11.学生信息选择查看个人信息程序即打印出当前学生的相关信息。
如图所示。
图学生信息12.退出图选择退出即退出程序。
如图所示。
图退出程序6 总结与体会总结本程序实现了学生选课及管理员对课程的操作功能,而学生的选课及管理员对课程的管理,都可以按学分或类型来进行操作。
管理员登录的默认密码是123,管理员可以添加新的选修课课程,也可以删除原有的选修课。
经过此次的课程设计,我们受益颇丰,尤其是对在编写过程中遇到的难题的处理方法,学会了很多程序设计的技巧。
编写程序中遇到的问题及解决办法(1)在无法与后台交互的情况下如何实现用户登录因为只需要管理员有对选修课操作的能力,因此不需储存管理员的信息,只需在其登录前询问密码即可。
而学生的登录,在其登录时分配一个对象空间,储存在其登录时获取的学号及姓名即可,即每一个学生的登录相当于注册过程。
(2)如何在不退出程序的情况下,能够让多位学生进行选课定义学生类对象数组,每一位学生选完课后,再分配一个新的学生类对象空间。
(3)如何实现对学生对象中课程对象成员的覆盖一开始我们为了方便起见是考虑学生类课程对象定义为引用,这样只需引用已有的选修课课程即可,但这样的话,在对学生对象初始化时引用的初始化就成了问题,因此只能放弃。
最终是选择了使用set和get方法对对象成员的成员一个个覆盖。
参考文献[1] 黄维通.Visual C++面向对象与可视化程序设计(第2版).北京:清华大学出版社,2007.[2] 张乃孝,陈光,孙猛.算法与数据结构——C语言描述(第三版),2011.[3] 谭浩强.C程序语言设计(第三版)[M].北京:清华大学出版社,2007.[4] 杨永斌.数据结构理论与实践[M].天津:科学技术出版社,2011.[5] 罗建军.C++程序射机枪教程(第2版).北京:高等教育出版社,2004.[6] 郑振杰.C++程序设计. 北京:人民邮电出版社,2005.[7] 刘觉夫,王更生等.c++程序设计.北京:邮电大学出版社,2011.[8] 邵伟忠.C常用算法程序集.天津:人民出版社,2009.[9] 徐世亮.C++大学教程.北京:人民邮电出版社,2010.[10] 吴华恩.C++程序设计.北京:机械工业出版社,2008.[11] 邵伟忠.C常用算法程序集.天津:人民出版社,2009.附录源程序#include <>#include <>#define M 10class Course ;();cout << "2.";();cout << "选修课总学分: " << () + () << '\n' <<endl;}void selectCourse_1(Course cc) etScore() !=0; i++) etId())==0) {if(1 == k){s1[s_num1].selectCourse_1(c1[i]);break;}if(2 == k){s1[s_num1].selectCourse_2(c1[i]);break;}}}if(0 == j){cout << "\n您是否想要继续选课(y/n):";cin >> select1;if('n' == select1) break;}}cout << "\n选课成功!" << endl;}void selectScore(Course c1[M]) \n 2. " << endl;cout << " 请选择:";cin >> select;num = 1;if(1 == select){for(i=0; i<M && c1[i].getScore() !=0; i++)if == c1[i].getScore()){cout << num << '.';c1[i].print();cout << endl;num++;}}}else if(2 == select){for(i=0; i<M && c1[i].getScore() !=0; i++){if == c1[i].getScore()){cout << num << '.';c1[i].print();cout << endl;num++;}}}else cout << "对不起,您的输入有误,请重新输入!\n\n";}void selectNature(Course c1[M]) 艺术类\n 2. 学术类" << endl;cout << " 请选择:";cin >> select;num = 1;if(1 == select){for(i=0; i<M && c1[i].getScore() !=0; i++){if(strcmp(n1, c1[i].getNature()) == 0){cout << num << '.';c1[i].print();cout << endl;num++;}}}else if(2 == select)for(i=0; i<M && c1[i].getScore() !=0; i++){if(strcmp(n2, c1[i].getNature()) == 0){cout << num << '.';c1[i].print();cout << endl;num++;}}}else cout << "对不起,您的输入有误,请重新输入!\n\n";}void xu(Course c1[M]) etScore() !=0; j++){for(i=num; i<M && c1[i].getScore() !=0; i++){if(strcmp( c1[i].getId(), c1[i+1].getId() ) > 0){k++;(c1[i].getId(),c1[i].getName(),c1[i].getNature(),c1[i].getDate(),c1[i].getS hours(),c1[i].getAhours(),c1[i].getScore());c1[i].set(c1[i+1].getId(),c1[i+1].getName(),c1[i+1].getNature(),c1[i+1].get Date(),c1[i+1].getShours(),c1[i+1].getAhours(),c1[i+1].getScore());c1[i+1].set(),(),(),(),(),(),());}else k = 2;if(1 == k) num = i;}k = 0;}}void menu(Course c1[6], Student s1[10]) 理员 |" << endl;cout << "| 2.学生 |" << endl;cout << "| 3.退出 |" << endl;cout << "============" << endl;cout << "\n请选择:";cin >> select;switch(select){case 1:flag3 = 1;while(1){cout << "请输入密码(输入-1退出):";cin >> password;if(-1 == password){flag3 =0;break;}if(123 == password){cout << "\n 管理员,你好!欢迎登录!" <<endl;break;}cout << "密码错误,请重新输入!\n";}while(flag3){cout << "\n================" <<endl;cout << "| 菜单 |" <<endl;cout << "================" <<endl;cout << "| 1.添加选修课 |" << endl;cout << "| 2.删除选修课 |" << endl;cout << "| 3.查看选修课 |" << endl;cout << "| 4.返回上一层 |" << endl;cout << "================" <<endl;cout << "\n请选择:";cin >> select;switch(select){case 1:newNum = 0;for(i=0; i<M && c1[i].getScore() !=0; i++) newNum++;cout << "\n请按格式依次输入选修课的编号、名称、上课时间、类型(艺术类或学术类)、授课学时、实验学时、学分:" << endl;cin >> id1 >> name1 >> da >> na >> sh >> ah >> sc;c1[newNum].set(id1, name1, da, na, sh, ah, sc);xu(c1);cout << "添加成功!" << endl;break;case 2:flag4 = 1;j = 0;num = 0;while(flag4){cout << "\n请输入您想要删除课程的编号:";cin >> id[j];for(i=0; i<M && c1[i].getScore() !=0; i++){if(strcmp(id[j], c1[i].getId())==0){for(num=i; num<M && c1[i].getScore() !=0; num++){c1[num].set(c1[num+1].getId(),c1[num+1].getName(),c1[num+1].getNature(),c1[ num+1].getDate(),c1[num+1].getShours(),c1[num+1].getAhours(),c1[num+1].getScore ());}c1[num] = Course();break;}}cout << "删除成功!\n";cout << "\n您是否想要继续删除(y/n):";cin >> select1;if('n' == select1) break;j++;}break;case 3:flag2 = 1;while(flag2){cout << "\n============================" <<endl;cout << "| 菜单 |" <<endl;cout << "============================" <<endl;cout << "| 1.按学分查询选修课 |" << endl;cout << "| 2.按选修课类型查询选修课 |" <<endl;cout << "| 3.显示全部 |" << endl;cout << "| 4.返回上一层 |" << endl;cout << "============================" <<endl;cout << "请选择:";cin >> select;switch(select){case 1:selectScore(c1);break;case 2:selectNature(c1);break;case 3:for(i=0; i<M && c1[i].getScore() !=0; i++){cout << i+1 << '.' ;c1[i].print();cout << endl;}break;case 4:flag2 = 0;break;default :cout << "对不起,您的输入有误,请重新输入!\n\n";}}break;case 4:flag3 = 0;break;default :cout << "对不起,您的输入有误,请重新输入!\n\n";}}break;case 2:char a[10], b[10];s1[s_num] = Student();cout << "\n请输入您的学号:";cin >> a;s1[s_num].setId(a);cout << "请输入您的姓名:";cin >> b;s1[s_num].setName(b);flag1 = 1;while(flag1){cout << "\n================" <<endl;cout << "| 菜单 |" <<endl;cout << "================" <<endl;cout << "| 1.选课 |" << endl;cout << "| 2.个人信息 |" << endl;cout << "| 3.返回上一层 |" << endl;cout << "================" <<endl;cout << "请选择:";cin >> select;switch(select){case 1:flag2 = 1;cout << "\n" << s1[s_num].getName() << ",你好!欢迎登录!" << endl;while(flag2){cout << "\n============================" <<endl;cout << "| 菜单 |" <<endl;cout << "=============================" <<endl;cout << "| 1.按学分查询选修课 |" << endl;cout << "| 2.按选修课类型查询选修课 |" << endl;cout << "| 3.显示全部 |" << endl;cout << "| 4.返回上一层 |" << endl;cout << "=============================" <<endl;cout << "请选择:";cin >> select;switch(select){case 1:selectScore(c1);selectCourse(s1, c1 ,s_num);break;case 2:selectNature(c1);selectCourse(s1, c1 ,s_num);break;case 3:for(i=0; i<M && c1[i].getScore() !=0; i++){cout << i+1 << '.' ;c1[i].print();cout << endl;}selectCourse(s1, c1, s_num);break;case 4:flag2 = 0;break;default :cout << "对不起,您的输入有误,请重新输入!\n\n";}}break;case 2:s1[s_num].print();break;case 3:flag1 = 0;s_num++;break;default :cout << "对不起,您的输入有误,请重新输入!\n\n";}}break;case 3:flag0 = 0;cout << " 谢谢使用!\n 再见!" << endl;break;default :cout << "对不起,您的输入有误,请重新输入!\n\n";}}}void main() //管理员默认密码:123{Student s[10]; //学生数组,用于不同学生的选课Course c[M]; //定义了一个课程类的数组,储存所有选修课c[0] = Course("001", "健康与养生", "学术类", "", 15, 0, ;c[1] = Course("003", "音乐鉴赏", "艺术类", "", 12, 3, ;c[2] = Course("006", "数学建模", "学术类", "", 10, 6, ;c[3] = Course("007", "酒文化与鉴赏", "艺术类", "", 15, 3, ;c[4] = Course("010", "影视名片鉴赏", "艺术类", "", 12, 0, ;c[5] = Course("015", "药膳", "学术类" , "", 12, 3, ;xu(c);cout << "************************************" << endl;cout << " 选修课系统 " << endl;cout << "************************************\n" << endl;menu(c, s);}(。