课程管理系统的开发.doc_第1页
课程管理系统的开发.doc_第2页
课程管理系统的开发.doc_第3页
课程管理系统的开发.doc_第4页
课程管理系统的开发.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

#include #include #include #include using namespace std; /定义课程class course /某个学生所学的课程中的某一个public:char cname20; /课程名称float grade; /课程成绩course *Next; /指向下一个课程的指针;/学生类class studentpublic:student()root = NULL;const int maxcourse = 5;factcourse = 0;void readname(char N ); /读入学生的姓名void getname(char N); /得到学生的姓名void wrecourse(char N,float score); /要据课程名写入学生课程的成绩float average(); /学生课程的平均成绩void addcourse(char N,float g); /给学生增加一门课int findcourse(char N); /查找是否已有此课程,如果有返回,如果没有返回int retfactcourse() return factcourse; /得到所学的课程数目course *retroot() return root; /利用键表将所有的课程保存起来int retmaxcourse() return 5; /得到最多可学的课程数目void clrroot() /清零root = NULL;factcourse = 0;private:char sname20; /学生的姓名int maxcourse; /学生最多可以学五门课程int factcourse; /学生实际所学的课程数目course *root; /课程的根结点指针;void student:readname (char N)/读入学生的姓名 strcpy(sname,N); void student:getname(char 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 student:average()/学生课程的平均成绩float aver=0.0;course *p = root;while (p) aver = aver+p-grade; aver = aver/factcourse;return aver; void student:addcourse (char N,float g)/给学生增加一门课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);newcourse-grade = g;factcourse+;int student:findcourse (char N)/查找是否已有此课程,如果有返回,如果没有返回course *p = root;if(root=NULL)return 0;p = p-Next;while(p) if(strcmp(p-cname,N)=0)return 1;p = p-Next;return 0; class studentdbpublic:student stu;studentdb *Next; ;struct studentnamechar tname20; /学生的名字float result; /学生所得的该课程分数studentname *Next; ; /课程类class subjectpublic:subject()first = NULL;maxstudent=30;activestudnet=0; float readcredit(); /得到课程的学分void getcredit(float a); /设置学分float getaverage(); /得到学生的平均成绩float getresult(char N); /查找某个学生的成绩void getkname(char N); /读出课程的名称void setkname(char N); /读入课程的名称studentname *retfirst() return first; /返回根结点void findstudent(studentdb *P); /根据该课程的名称,寻找选这课程的学生int retactivestudent() return activestudnet; /返回实际学生数int retmaxstudent() return 30; /返回最多学生数void clractivestudnet() activestudnet = 0; /从文件中读出来后将实际学生数清零private:int maxstudent; /最多学生数int activestudnet; /实际学生数studentname *first; /学生名单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;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)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;first = newcode;studentname *T = first;studentdb *K = P-Next;while(K)course *Y = K-stu.retroot();if(Y =NULL) K = K-Next;continue; if(Y!=NULL)Y = Y-Next;while(Y) if(strcmp(Y-cname,kname)=0)studentname *Acode = new studentname;char Name20;K-stu.getname(Name);strcpy(Acode-tname,Name);Acode-result = Y-grade;Acode-Next = T-Next;T-Next = Acode;activestudnet = activestudnet + 1;break; Y = Y-Next; K = K-Next; return ; void tuichu()system(cls);coutnn谢谢你使用选修课系统nnendl;coutn youre welcome ! nendl; getch();exit(-1); /总菜单char menu()int k=0;char a3,c,i;system(cls);coutendlendl;cout*n* *n* 学生选修课系统 *n* *n* *n* 操作方式: *n* 1.选修课系统学生端 *n* *n* 2.选修课系统管理端 *n* *n*nendl;while(1)couta;if(strlen(a)=1)for(i=1;i=2;i+)c=i;if(c=a0)return c; cerrnntttt输入有误!n2)system(cls);cerrnnntt提示:错误输入次数超过三次,你将被强制退出!nnendl;couttt按任意键继续endl;getch();tuichu(); /选修课系统端操作char custom()char A10;char b;char i;int k = 0;system(cls);coutnnnn 选修课系统学生端 n n 操作方式:. n 1、 学生选课 n 2、 学生情况 n 3、 选课情况 n 4、 退出系统 n nnendl;while(1)coutA;if(strlen(A)=1)for(i=1;i=4;i+)b=i;if(b=A0) return b; cerrntttt输入有误!n2)system(cls);cerrnnttt提示:错误输入超过三次!你将被强制退出!nendl;couttt按任意键继续endl;getch();tuichu(); char server()char A10;char b;char i;int k = 0;system(cls);coutnnnn n 选修课系统管理端 n n 操作方式: n 1.增加学生 2.增加课程 n 3.删除学生 4.删除课程 n 5.填写成绩 6.更改学分 n 7.学生情况 8.选课情况 n 9.保存数据 0.退出系统 n nnendl;while(1)coutA;if(strlen(A)=1)for(i=0;i=9;i+)b=i;if(b=A0)return b; cerrntttt输入有误!n2)cerr错误输入超过三次!n;exit(-1); /密码检查void password()int k=0,i;char A=admin;char B10;char a;system(cls);for(i=0;i8;i+)coutendl;while(k=2)printf(ttt请输入管理员密码:);i=0;while(1)a=getch();if(a=13)break;Bi=a;i+;printf(*);Bi=0;if(strcmp(A,B)=0)return;elsek+;cerrnnttt密码输入错误!请重新输入!n=3)system(cls);cerrnnttt输入错误密码超过三次!请按任意键退出.endl;getch();tuichu();struct subjectdbsubject sub;subjectdb *Next;int menu_2_7(studentdb *P);int menu_2_9(studentdb *Y,subjectdb *P);int menu_2_8(subjectdb *P);/学生端功能函数int menu_1_1(studentdb *P,subjectdb *X) /学生选课system(cls);coutnntttt学生选课操作Next;int i;char N20,M20;if(q!=NULL)coutnnntt所有学生名单如下:nendl;elsecerrnnntt对不起,暂无学生名单!请先创建!请按任意键继续.stu.getname(N);coutttttN;coutNext ; q = P-Next;if(q=NULL)return 1;coutN;i=0;q=P-Next;while(q)q-stu.getname(M);if(strcmp(N,M)=0)i+;q = q-Next; int j=0,k=1;if(i=0)coutnntt没有这个学生! 请按任意键返回.1)coutnntt共找到i个姓名为N的学生endl;coutk; if(ki|k=0)cerrnttt输入有误!按任意键继续Next;j=0;while(q)q-stu.getname(M);if(strcmp(N,M)=0)j+;if(j=k)if(q-stu.retfactcourse()=q-stu.retmaxcourse()coutntt所选课程已满!按任意键继续Next;char N120;system(cls);if(t!=NULL)coutnnntt所有课程如下:endl;coutntttt课程名称tt 学分endl; elsecerrnnntt对不起,暂时没有课程sub.getkname(N1);couttttt N1setw(26-strlen(N1)sub.readcredit()Next ; char N220;coutN2;t = X-Next;while(t)t-sub.getkname(N1);if(strcmp(N1,N2)=0)if(q-stu.findcourse(N2)=1)coutntt此课程你已选过了,不能再选.按任意键继续Next;char NA20;while(t)t-sub.getkname(NA);if(strcmp(NA,N2)=0)if(t-sub.retactivestudent()=t-sub.retmaxstudent ()coutntt此课程已选满,不能选.按任意键继续Next; q-stu.addcourse(N2,0.0);coutnntt选课成功!按任意键继续Next; cerrntt没有此课程!按任意键继续Next; return 1; int menu_1_2(studentdb *P,subjectdb *X) /学生情况studentdb *q=P-Next;char N20;system(cls);coutnntttt学生情况操作endl;int i;if(q!=NULL)coutnnntt所有学生选课信息如下:nendlendl;couttt 姓名ttt选课情况nendl; elsecerrnnntt对不起,暂时没有学生名单!请按任意键继续.stu.getname(N);couttt Nsetw(25-strlen(N) 已选stu.retfactcourse() 门课Next ; char M20;coutM;i=0;q=P-Next;while(q)q-stu.getname(N);if(strcmp(N,M)=0)i+;q = q-Next; int j=0,k=1;if(i=0)coutnttt没找到这个学生!请按任意键继续.1)coutntt共找到i个姓名为M的学生endl;coutk; if(ki|k=0)cerrnttt输入有误!按任意键继续.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=NULL)coutnnntttN同学你还未选课! 请按任意键继续.Next;coutnnnttN同学你已选stu.retfactcourse()门课,具体如下nnendl;coutttt课程名称tt成绩nendl;while(T)coutttt cnamecname)gradeNext; j=0; q = q-Next; coutntt请按任意键继续.Next;char N20;system(cls);coutnntttt选课情况操作endl;if(q!=NULL)coutnnntt所有选课情况如下:nendl;coutnttt课程名称tt选课人数nendl; elsecerrnnntt对不起,暂时没有课程!请按任意键继续.sub.getkname(N);couttttNsetw(28-strlen(N)sub.retactivestudent()Next ; coutntt请按任意键继续.endl;return 1; int menu_1_4(studentdb *X,subjectdb *P) /退出系统menu_2_9(X,P);tuichu();return 0; /管理端功能函数int menu_2_1(studentdb *P) /增加学生char N20;system(cls);coutnntttt增加学生操作nendl;coutN;coutendltt增加学生操作成功,按任意键继续Next = P-Next ;newnode-stu.readname(N);P-Next = newnode ;return 1; int menu_2_2(subjectdb *P) /增加课程float k;char N20,M20;system(cls);coutnntttt增加课程操作nendl;coutN;coutNext;while(q)q-sub.getkname(M);if(strcmp(N,M)=0)coutntt此课程已经存在,按任意键继续Next; coutk;coutntt增加课程操作成功,按任意键继续Next = P-Next ;newnode-sub.setkname(N);newnode-sub.getcredit(k);P-Next = newnode ;return 1; int menu_2_3(studentdb *P) /删除学生system(cls);coutnntttt删除学生操作Next;if(q=NULL)return 1;int i;char N20,M20;coutN;i=0;while(q)q-stu.getname(M);if(strcmp(N,M)=0)i+;q = q-Next; int j=0,k=1;if(i=0)cerrntt没有这个学生!请按任意键继续.1)coutntt共找到i个姓名为N的学生endl;coutk; if(ki|kNext;studentdb *R = P;j=0;while(q)q-stu.getname(M);if(strcmp(N,M)=0)j+;if(j=k)R-Next = q-Next;free(q);coutntt删除学生操作成功,按任意键继续.Next;R = R-Next; return 1; int menu_2_4(subjectdb *P) /删除课程subjectdb *q=P-Next;char N20;system(cls);coutnntttt删除课程操作endl;if(q!=NULL)coutnnntt所有课程如下:nendl;elsecerrnnntt对不起,暂时没有课程!请按任意键继续.sub.getkname(N);coutttttNNext ; q = P-Next;subjectdb *R = P;if(q=NULL)return 1;char M20;coutM;while(q)q-sub.getkname(N);if(strcmp(N,M)=0)R-Next = q-Next;free(q);coutntt删除课程操作成功,按任意键继续Next;R = R-Next; cerrntt没有此课程!t请按任意键继续.Next;char M20,N20,NA20;float score;system(cls);coutnntttt 填写成绩操作nendl;if(q!=NULL)coutnttt课程名称tt选课人数nendl;elsecoutnnntt对不起,暂时没有任何选修课程。请按任意键继续.sub.getkname(N);couttttNsetw(28-strlen(N)sub.retactivestudent()Next ; q = P-Next;coutM;while(q)q-sub.getkname(N);studentname *K = q-sub.retfirst();if(K!=NULL)K = K-Next;if(strcmp(N,M)=0)system(cls);if(K!=NULL)coutnntt请填写选修M的学生成绩nendl;coutnttt姓名tt成绩endl; if(K=NULL)cerrnttt无任何信息!请按任意键继续.endl;while(K)coutnttttnamescore;studentdb *XX = X-Next;while(XX)XX-stu.getname(NA);if(strcmp(NA,K-tname)=0)XX-stu.wrecourse(M,score);XX = XX-Next; K = K-Next; if(K=NULL)coutntt填写成绩完毕!请按任意键继续.Next; cerrntt没有此课程!请按任意键继续.endl;return 1; int menu_2_6(subjectdb *P) /更改学分float k;system(cls);coutnnntttt更改学分操作nNext;char N20,M20;if(q!=NULL)coutnnntt 所有课程如下:nendl;elsecerrnnntt对不起,暂时没有任何可选课程。请按任意键继续.sub.getkname(N);couttttt NNext ; q = P-Next;coutM;while(q)q-sub.getkname(N);if(strcmp(N,M)=0)coutnttt原来学分为:sub.readcredit()endl;coutk;q-sub.getcredit(k);coutntt更改课程学分成功,按任意键继续Next; cerrntt无此课程!请按任意键继续.Next;char N20;system(cls);coutnnntttt学生情况操作nendl;if(q!=NULL)coutnnntt所有学生名单如下:nendl;elsecerrnnntt对不起,暂时没有学生名单!请按任意键继续.stu.getname(N);coutttttN;coutNext ; coutntt按任意键继续.Next;char M20,N20;system(cls);coutnntttt选课情况操作endl;if(q!=NULL)coutnnntt所有选课情况如下:nendl;coutnttt课程名称tt选课人数nendl; elsecerrnnntt对不起,暂时没有课程!请按任意键继续.sub.getkname(N);couttttNsetw(28-strlen(N)sub.retactivestudent()Next ; q = P-Next;coutM;while(q)q-sub.getkname(N);studentname *K = q-sub.retfirst();if(K!=NULL)K = K-Next;if(strcmp(N,M)=0)system(cls);if(K=NULL)cerrnnt无任何选课信息!t请按任意键继续.endl;return 1;coutnnntt选修M课的学生名单如下:nendl;coutnttt姓名tt 成绩endl;while(K)coutnttttnametname)resultNext; coutntt请按任意键继续.Next; cerrntt无此课程!t请按任意键继续.Next;subjectdb *X = P-Next;system(cls);fstream file(subject.txt,ios:out);while(X)file.write (char *)&(X-sub),sizeof(X-sub);X = X-Next; file.close();fstream file1(student.txt,ios:out);fstream file2(course.txt,ios:out);while(Z)file1.write (char *)&(

温馨提示

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

评论

0/150

提交评论