




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+大学选课系统课程设计-课程设计C+大学选课系统课程设计 目录第一章 课程设计目的 2第二章 课程内容设计和要求 3第三章 源代码 14第四章 运行结果 38第五章 结束语 52第六章 参考文献 53 第一章 课程设计目的1. 目标 选课系统开发的目标是实现学生选课信息关系的系统化、规范化和自动化。 2. 系统技术 学生选课系统要求具有信息处理的开发性,方便教师上传学生成绩、学生上网选课和查询选课信息及成绩等,因此本系统设计为基于WWW的网络数据库应用系统,使用
2、ASP脚本以Access为数据库的开发技术,运行在支持ASP的服务器上。 3. 基本设计概念和处理流程 采用基于SQL Server的分布式数据库管理系统。三层结构是目前用得最多的,这种结构比传统的C/S结构增加了一个应用程序服务器,应用程序服务器包括了统一的界面、业务规则和数据处理逻辑等等,这样客户端程序就可以做得比较小,也就是常说的瘦客户。更由于业务规则和数据处理逻辑的集中在服务器上统一管理,客户端无须进行复杂的计算,也不会因为错误的操作而影响到其他的用户,所以可靠性、稳定性和效率都比较好。(其结构如图) 4. 用户的特点 为保证系统安全高效地运行,本系统把用户划分为3类:教务处、教师和学
3、生。不同的用户在系统中的作用和权限也有所不同,所以它所需要完成的功能也就不同。 (1)教务处可以完成本系统所有的功能 学生信息管理:除学生基本信息外,还可管理学生所选课程、成绩等。 教师信息管理:包括教师个人的基本情况和任课情况。 项目及班数的设定:根据学校教务处所排课进行班级数及人数的统计,然后根据统计结果进行项目及班数的设定。 排课:根据上一步分班情况安排任课教师。 报表生成及输出:生成教师担任课程分班表、按项目生成学生成绩表、按学生行政班生成成绩表及所有报表的输出。 (2)教师在本系统的功能 查询学生选课情况、自己任课情况、获取自己所担任课程分班表、录入及修改成绩等。 (3)学生在本系统
4、的功能 查询本人信息、教师任课信息、选课、选课信息查询、成绩查询。 第二章 课程内容设计和要求二、需求规定 (一)对功能的规定 1. 可实现学生选课注册。 2. 方便实现学生选课信息查询。 3. 可对学生成绩档案进行管理,成绩表单生成简便。 4. 安全有效的用户区分,管理。 5. 档案数据的高安全性,保密性。 6. 有帮助文档 (二)对性能的规定 使用稳定,操作性能好,操作方法易于掌握,系统的安全性强。 三、设计思想 用户的需求具体表现在对各种信息的提供、编辑、处理及查询统计上。这就要求数据库结构能充分满足各种信息的输入、处理和输出。通过分析学生
5、选课管理系统的现实需求,学生选课管理系统各环节的基本数据及数据处理流程,在与管理人员沟通、交流与探讨的基础上,得到以下学生选课系统的数据流程图。3运行环境该程序的运行环境为Windows XP系统,版本。840C+大学选课系统源代码课程设计#include <string.h>#include <stdio.h>#include <iostream.h>#include <stdlib.h>#include <iomanip.h>#include <fstream.h>#include <conio.h>/定义
6、课程struct course /某个学生所学的课程中的某一个 char cname20; /课程名称 float grade; /课程成绩 course *Next; /指向下一个课程的指针;/学生类class studentpublic: student() root = NULL; const maxcourse = 5;
7、60;factcourse = 0; void readname(char N ); /读入学生的姓名 void getname(char N); /得到学生的姓名 void wrecourse(char N,float score); /要据课程名写入学生课程的成绩 float average(); /学生课程的平均成绩 void addcourse(char N,float
8、g); /给学生增加一门课 int findcourse(char N); /查找是否已有此课程,如果有返回1,如果没有返回0 int retfactcourse() return factcourse; /得到所学的课程数目 course *retroot() return root;
9、; /利用键表将所有的课程保存起来 int retmaxcourse() return 5; /得到最多可学的课程数目 void clrroot() /清零 root = NULL; factcourse = 0; student() private: char sname20;
10、 /学生的姓名 int maxcourse; /学生最多可以学五门课程 int factcourse; /学生实际所学的课程数目 course *root; /课程的根结点指针;void student:readname (char N) strcpy(sname,N);void student:getname(cha
11、r N) strcpy(N,sname);void student:wrecourse(char N,float score) course *p = root; if(p=NULL) return; if(p!=NULL) p = p->Next; while(p) if(strcmp(p->cname,N)=0) p->grade = score; p = p->Next; float
12、student:average() float aver=0.0;) course *s = new course; s->Next=NULL; if(root = NULL) root = s; course *p = root; course *newcourse = new course; newcourse->Next = p->Next; p->Next=newcourse; strcpy(newcourse->cname,N); newcour
13、se->grade = g; factcourse+;int student:findcourse (char N) course *p = root; if(root=NULL)C+大学选课系统课程设计return 0; p = p->Next; while(p) if(strcmp(p->cname,N)=0) return 1; p = p->Next; return 0;/struct studentdb
14、;student stu; studentdb *Next;struct studentname char tname20; /学生的名字 float result; /学生所得的该课程分数 studentname *Next;/课程类class subjectpublic: subject() first = NULL; maxstudent=30;
15、0; activestudnet=0; float readcredit(); /得到课程的学分 void getcredit(float a); /设置学分 float getaverage(); /得到学生的平均成绩 float getresult(char N); /查找某个学生的成绩 void getkname(char N); /读出课程的名称 void set
16、kname(char N); /读入课程的名称 studentname *retfirst() return first; /返回根结点 void findstudent(studentdb *P); /根据该课程的名称,寻找选这课程的学生 int retactivestudent() return activestudnet; /返回实际学生数 int retmaxstudent()
17、0; return 30; /返回最多学生数30 void clractivestudnet() activestudnet = 0; /从文件中读出来后将实际学生数清零 private: int maxstudent; /最多学生数 int activestudnet; /实际学生数 studentname *first;
18、 /学生名单 float credit; /该课程的学分 float averagerusult; /该课程的平均成绩 char kname20; /该课程的名称;float subject:readcredit () return credit;void subject:getcredit (float a) credit=a;float subject:getaverage() float k = 0.0; studentname *p;
19、 p=first->Next; if(p=NULL) return 0; while(p) k = k + p->result; p = p->Next ; return k/activestudnet;float subject:getresult (char N) studentname *p; p = first; while(p) if(strcpy(p->tname ,N)=0)&
20、#160; return p->result; p = p->Next ; return -1;void subject:getkname (char N) strcpy(N,kname);void subject:setkname (char N) strcpy(kname,N);void subject:findstudent(studentdb *P) studentname *newcode = new studentname; newcode->Next=NULL;
21、0;first = newcode; studentname *T = first; studentdb *K = P->Next; while(K) course *Y = K->stu.retroot(); if(Y =NULL) K = K->Next; continue; C+大学选课系统课程设计 if(Y!=NULL) Y = Y->
22、;Next; while(Y) if(strcmp(Y->cname,kname)=0) studentname *Acode = new studentname; char Name20; K->stu.getname(Name); strcpy(Acode->tname,Nam
23、e); Acode->result = Y->grade; Acode->Next = T->Next; T->Next = Acode; activestudnet = activestudnet + 1; break; Y = Y->Next;
24、160; K = K->Next; return ;/void tuichu() exit(-1);/总菜单char menu() int k=0; char a3,c,i; system("cls"); cout<<endl<<endl; cout<<"ttttC+课程设计课题nn"<<endl; cout<<"tt*n" <<&qu
25、ot;tt* *n" <<"tt*
26、0; 1.选课系统学生端 *n" <<"tt*
27、0; *n" <<"tt* 2.选课系统管理端
28、0; *n" <<"tt* *n" <&
29、lt;"tt*n"<<endl; while(1) cout<<"ntt请选择登入方式: " cin>>a; if(strlen(a)=1) for(i='1'i<='2'i+) c=i; if(c=a0)
30、60; return c; cerr<<"nntttt输入有误!n"<<endl; k+; if(k>2) system("cls"); cerr<<"nnntt提示:错误输入次数超过三次,你将被强制退出!nn"<<end
31、l; cout<<"tt按任意键继续"<<endl; getch(); tuichu(); /选修课系统端操作char custom() char A10; char b; char i; int k = 0; system("cls"); cout<<"nnn" <<"tt
32、n" <<"tt选修课系统学生端n" <<"tt n" <<"tt 操作方式: n" <<"tt1.学生选课 n" <<"tt2.学生情况n" <<"tt3.选课情况n"
33、 <<"tt4.退出系统n" <<"tt n" <<"ttn"<<endl; while(1) cout<<"ttt请选择操作方式: " cin>>A; if(s
34、trlen(A)=1) for(i='1'i<='4'i+) b=i; if(b=A0) return b; cerr<<"ntttt输入有误!n"<<endl; k+; if(k>2)&
35、#160; system("cls"); cerr<<"nnttt提示:错误输入超过三次!你将被强制退出!n"<<endl; cout<<"tt按任意键继续"<<endl; getch(); tuichu(); char server() char A10;
36、0;char b; char i; int k = 0; system("cls"); cout<<"nnn" <<"ttn" <<"tt
37、0; n" <<"tt 选修课系统管理端 &
38、#160; n" <<"tt &
39、#160; n" <<"tt 操作方式: &
40、#160; n" <<"tt 1.增加学生 2.增加课程 n" <<&
41、quot;tt 3.删除学生 4.删除课程 n" <<"tt 5.
42、填写成绩 6.更改学分 n" <<"tt 7.学生情况 8.选课情况 n&qu
43、ot; <<"tt 9.保存数据 0.退出系统 n" <<"tt
44、60; n" <<"ttn"<<endl; while(1)
45、; cout<<"tt 请选择操作方式: " cin>>A; if(strlen(A)=1) for(i='0'i<='9'i+) b=i; if(b=A0) return b;
46、60; cerr<<"ntttt输入有误!n"<<endl; k+; if(k>2) cerr<<"错误输入超过三次!n" exit(-1); /struct subjectdb subject sub; subjectdb *Next;int stuInform(studentdb *P);int sa
47、ve(studentdb *Y,subjectdb *P);int couInform(subjectdb *P);/学生端功能函数int selectCou(studentdb *P,subjectdb *X) /学生选课C+大学选课系统课程设计system("cls"); cout<<"nntttt学生选课操作"<<endl; studentdb *q=P->Next; int i; char N20,M20; if(q!=
48、NULL) cout<<"nnntt所有学生名单如下:n"<<endl; else cerr<<"nnntt对不起,暂时没有学生名单!请按任意键继续."<<endl; return 1; while(q) q->stu.getname(N); cout<<"tttt"<<N;
49、0;cout<<endl; q = q->Next ; q = P->Next; if(q=NULL) return 1; cout<<"nntt 请输入学生姓名:" cin>>N; i=0; q=P->Next; while(q) q->stu.getname(M); if(strcmp(N,M)=0)
50、0;i+; q = q->Next; int j=0,k=1; if(i=0) cout<<"nntt没有这个学生! 请按任意键返回."<<endl; return 1; else if(i>1) cout<<"nntt共找到"<<i<<"个姓名为"<<N<<"的学生
51、"<<endl; cout<<"tt选择第几个:" cin>>k; if(k>i|k<=0) cerr<<"nttt输入有误!按任意键继续"<<endl; return 1; q = P->Next; j=0; while(q) q->stu.getnam
52、e(M); if(strcmp(N,M)=0) j+; if(j=k) if(q->stu.retfactcourse()>=q->stu.retmaxcourse() cout<<"ntt所选课程已满!按任意键继续"<<endl; return 1;
53、; else subjectdb *t=X->Next; char N120; system("cls"); if(t!=NULL) cout<<"nnntt所有课程如下:&quo
54、t;<<endl; cout<<"ntttt课程名称tt 学分"<<endl; else cerr<<"nnntt对不起,暂时没有课程"<<endl; return 1; &
55、#160; while(t) t->sub.getkname(N1); cout<<"tttt "<<N1<<setw(26-strlen(N1)<<t->sub.readcredit()<<endl; t = t-
56、>Next ; char N220; cout<<"nt 输入你所要选的课程 : " cin>>N2; t = X->Next; while(t)
57、 t->sub.getkname(N1); if(strcmp(N1,N2)=0) if(q->stu.findcourse(N2)=1) cout<<"ntt此课程你已选过了,不能再选.按任意键继续&
58、quot;<<endl; return 1; t=X->Next; char NA20; while(t)
59、160; t->sub.getkname(NA); if(strcmp(NA,N2)=0) if(t->sub.retactivestudent()>=t->sub.retmaxstudent ()
60、 cout<<"ntt此课程已选满,不能选.按任意键继续"<<endl; q->stu.addcourse(N2,0.0); cout<<"nntt选课成功!按任意键继续"<<endl; &
61、#160; return 1; t = t->Next; cerr<<"ntt没有此课程!按任意键继续"<<endl; return 1; q = q->Next; return 1;
62、int stuInform(studentdb *P,subjectdb *X) /学生情况 studentdb *q=P->Next; char N20; system("cls"); cout<<"nntttt学生情况操作"<<endl; int i; if(q!=NULL) cout<<"nnntt所有学生选课信息如下:n"<<endl<<endl
63、; cout<<"tt 姓名ttt选课情况n"<<endl; else cerr<<"nnntt对不起,暂时没有学生名单!请按任意键继续."<<endl; return 1; while(q) q->stu.getname(N); cout<<"tt "<<N
64、<<setw(25-strlen(N)<<" 已选 "<<q->stu.retfactcourse()<<" 门课 "<<endl; q = q->Next ; char M20; cout<<"ntt输入要查看的学生姓名:" cin>>M; i=0; q=P->Next; while(q) q->st
65、u.getname(N); if(strcmp(N,M)=0) i+; q = q->Next;C+大学选课系统课程设计 int j=0,k=1; if(i=0) cout<<"nttt没找到这个学生!请按任意键继续."<<endl; return 1; else if(i>1) cout<
66、<"ntt共找到"<<i<<"个姓名为"<<M<<"的学生"<<endl; cout<<"tt选择第几个:" cin>>k; if(k>i|k<=0) cerr<<"nttt输入有误!按任意键继续."<<endl; return 1;
67、60;q = P->Next; j=0; q=P->Next; while(q) q->stu.getname(N); if(strcmp(N,M)=0) j+; if(j=k) system("cls"); course *T=q->stu.retroot(); if(T=
68、NULL) cout<<"nnnttt"<<N<<"同学你还未选课! 请按任意键继续."<<endl; return 1; if (T!=NULL) T = T->Next; cout<<"nnntt&qu
69、ot;<<N<<"同学你已选"<<q->stu.retfactcourse()<<"门课,具体如下nn"<<endl; cout<<"ttt课程名称tt成绩n"<<endl; while(T) cout<<"ttt "<<T->cname<&l
70、t;setw(25-strlen(T->cname)<<T->grade<<endl; T = T->Next; j=0; q = q->Next; cout<<"ntt请按任意键继续."<<endl; return 1;int scInform(subjectdb *P) /选课情况
71、160;subjectdb *q=P->Next; char N20; system("cls"); cout<<"nntttt选课情况操作"<<endl; if(q!=NULL) cout<<"nnntt所有选课情况如下:n"<<endl; cout<<"nttt课程名称tt选课人数n"<<endl; else
72、; cerr<<"nnntt对不起,暂时没有课程!请按任意键继续."<<endl; return 1; while(q) q->sub.getkname(N); cout<<"ttt"<<N<<setw(28-strlen(N)<<q->sub.retactivestudent()<<endl; q = q->N
73、ext ; cout<<"ntt请按任意键继续."<<endl; return 1;int menu_1_4(studentdb *X,subjectdb *P) /退出系统 save(X,P); tuichu(); return 0;/管理端功能函数int addStudent(studentdb *P) /增加学生 char N20; system("cls"); cout<<
74、"nntttt增加学生操作n"<<endl; cout<<"nntt请输入学生姓名:" cin>>N; cout<<endl<<"tt增加学生操作成功,按任意键继续"<<endl; studentdb *newnode = new studentdb; newnode->Next = P->Next ; newnode->stu.readname(N); P->Next
75、= newnode ; return 1;int addCourse(subjectdb *P) /增加课程 float k; char N20,M20; system("cls"); cout<<"nntttt增加课程操作n"<<endl; cout<<"nntt 请输入课程名称:" cin>>N; cout<<endl; subjectdb *q
76、= P->Next; while(q) q->sub.getkname(M); if(strcmp(N,M)=0) cout<<"ntt此课程已经存在,按任意键继续"<<endl; return 1; q = q->Next; cout<<"tt输入此课程的学分:" c
77、in>>k; cout<<"ntt增加课程操作成功,按任意键继续"<<endl; subjectdb *newnode = new subjectdb; newnode->Next = P->Next ; newnode->sub.setkname(N); newnode->sub.getcredit(k); P->Next = newnode ; return 1;int deleteStudent(studentdb *P)
78、 /删除学生 system("cls"); cout<<"nntttt删除学生操作"<<endl; stuInform(P); studentdb *q = P->Next; if(q=NULL) return 1; int i; char N20,M20; cout<<"nt请输入要删除的学生姓名 :" cin>>N; i=0; whil
79、e(q) q->stu.getname(M); if(strcmp(N,M)=0) i+; q = q->Next; int j=0,k=1; if(i=0) cerr<<"ntt没有这个学生!请按任意键继续."<<endl; return 1; else if(i>1) cout
80、<<"ntt共找到"<<i<<"个姓名为"<<N<<"的学生"<<endl; cout<<"ntt要删除第几个:" cin>>k; if(k>i|k<=0) return 1; q = P->Next; studentdb *R = P;C+大学选课系统课程设计 j=0; wh
81、ile(q) q->stu.getname(M); if(strcmp(N,M)=0) j+; if(j=k) R->Next = q->Next; free(q); cout<<"ntt删除学生操作成功,按任意键继续."<<endl; return 1;
82、; q = q->Next; R = R->Next; return 1;int deleteCourse(subjectdb *P) /删除课程 subjectdb *q=P->Next; char N20; system("cls"); cout<<"nntttt删除课程操作"<<endl; if(q!=NULL) cout<<
83、;"nnntt所有课程如下:n"<<endl; else cerr<<"nnntt对不起,暂时没有课程!请按任意键继续."<<endl; return 1; while(q) q->sub.getkname(N); cout<<"tttt"<<N<<endl; q = q->Next ;&
84、#160; q = P->Next; subjectdb *R = P; if(q=NULL) return 1; char M20; cout<<"nt 请输入要删除的课程 :" cin>>M; while(q) q->sub.getkname(N); if(strcmp(N,M)=0) R->
85、;Next = q->Next; free(q); cout<<"ntt删除课程操作成功,按任意键继续"<<endl; return 1; q = q->Next; R = R->Next; cerr<<"ntt没有此课程!t请按任意键继续."<<endl; return 1;int ins
86、ertScore(studentdb *X,subjectdb *P) /填写成绩 subjectdb *q=P->Next; char M20,N20,NA20; float score; system("cls"); cout<<"nntttt 填写成绩操作n"<<endl; if(q!=NULL) cout<<"nttt课程名称tt选课人数n"<<endl;&
87、#160;else cout<<"nnntt对不起,暂时没有任何选修课程。请按任意键继续."<<endl; return 1; while(q) q->sub.getkname(N); cout<<"ttt"<<N<<setw(28-strlen(N)<<q->sub.retactivestudent()<<endl;
88、; q = q->Next ; q = P->Next; cout<<"nt请输入课程名称 :" cin>>M; while(q) q->sub.getkname(N); studentname *K = q->sub.retfirst(); if(K!=NULL) K = K->Next; if(strcmp(N,M)=0)&
89、#160; system("cls"); if(K!=NULL) cout<<"nntt请填写选修"<<M<<"的学生成绩n"<<endl; cout<<"nttt姓名tt成绩"<<endl;
90、 if(K=NULL) cerr<<"nttt无任何信息!请按任意键继续."<<endl; while(K) cout<<"nttt"<<K->tname<<"tt " cin>>score;
91、160;studentdb *XX = X->Next; while(XX) XX->stu.getname(NA); if(strcmp(NA,K->tname)=0) XX->stu.wrecourse(M,score); XX =
92、XX->Next; K = K->Next; if(K=NULL) cout<<"ntt填写成绩完毕!请按任意键继续."<<endl; return 1; q = q->Next; cerr<<"ntt没
93、有此课程!请按任意键继续."<<endl; return 1;int changeSC(subjectdb *P) /更改学分 float k; system("cls"); cout<<"nnntttt更改学分操作n"<<endl; subjectdb *q = P->Next; char N20,M20; if(q!=NULL) cout<<"nnnt
94、t 所有课程如下:n"<<endl; else cerr<<"nnntt对不起,暂时没有任何可选课程。请按任意键继续."<<endl; return 1; while(q) q->sub.getkname(N); cout<<"tttt "<<N<<endl; q = q->Next ; q = P->Next; cout<<"nnntt请输入要改的课程 :" cin>>M; while(q) q->sub.getkname(N); if(strcmp(N,M)=0) cout<<"nttt原来学分为 :"<<q->sub
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校介护实训室设备采购 投标方案(技术方案)
- 体育馆土石方运输平整协议
- 医疗器械操作规范与标准作业指导书
- 环保理念与低碳生活实践方法作业指导书
- 三农人才培养及实施方案指导书
- 新能源汽车充电红灯
- 新能源汽车充电桩难题
- 品牌管理与推广操作手册
- 商家自行配送怎么查物流
- 施工建筑设计说明
- EXCEL宏编程简明教程(有实例)
- 幼儿园10以内的加减法课件
- 益生菌精品课件
- 超声科质量控制内容与标准完整
- 研究思路图模板
- 耳鼻咽喉头颈外科学第篇 鼻科学
- 沃尔玛全国的分布
- 电子营业执照下载确认书(外籍法定代表人)
- 钢结构厂房工程施工组织设计方案(85页)
- T∕CGCC 17-2018 商业信誉评价体系
- 数独6×6初级打印版
评论
0/150
提交评论