⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 学生选课系统.txt

📁 简单的类与对象的内容
💻 TXT
📖 第 1 页 / 共 4 页
字号:
#include <string.h>    
#include <stdio.h>    
#include <iostream.h>    
#include <stdlib.h>    
#include <iomanip.h>    
#include <fstream.h>    
#include <conio.h>    
    
///////////////////////////////////////////////////////////////////////////    
//定义课程    
struct course        //某个学生所学的课程中的某一个    
{    
char cname[20];  //课程名称    
float grade;    //课程成绩    
course *Next;   //指向下一个课程的指针    
};    
///////////////////////////////////////////////////////////////////////////    
//学生类    
class student    
{    
public:    
student()    
{    
root = NULL;    
const 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[]);    //查找是否已有此课程,如果有返回1,如果没有返回0    
int retfactcourse()    
{    
return factcourse;    
}         //得到所学的课程数目    
course *retroot()    
{    
return root;      //利用键表将所有的课程保存起来    
}    
int retmaxcourse()    
{    
return 5;      //得到最多可学的课程数目    
}    
void clrroot()      //清零    
{    
root = NULL;    
factcourse = 0;    
}    
student()    
{    
    
}    
    
private:    
char sname[20];        //学生的姓名    
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;    
}    
/////////////////////////////////////////////////////////////////////////////////////////////    
struct studentdb    
{    
student stu;    
studentdb *Next;    
};    
struct studentname    
{    
char tname[20];       //学生的名字    
float  result;     //学生所得的该课程分数    
studentname *Next;    
};    
/////////////////////////////////////////////////////////////////////////////////////////////    
//课程类    
class subject    
{    
public:    
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;     //返回最多学生数30    
}    
void clractivestudnet()    
{    
activestudnet = 0;   //从文件中读出来后将实际学生数清零    
}    
    
private:    
int maxstudent;    //最多学生数    
int activestudnet;   //实际学生数    
studentname *first;   //学生名单    
float credit;    //该课程的学分    
float averagerusult;  //该课程的平均成绩    
char kname[20];    //该课程的名称    
};    
    
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 Name[20];    
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");    
cout<<"\n\n\t\t\t谢谢你使用选修课小系统\t再见\n\n"<<endl;    
cout<<"\n\t   如果你觉得此软件有修改及补充之处,请按以下方式联系我们,"    
<<"\n\t提出你的宝贵意见.我们将不断地改进并及时的公布新版本。谢谢!!\n\n"<<endl;    
cout<<"\t\t联系方式:\n"    
<<"\t\t        姓名:郑德锋\n\n"    
<<"\t\t        电话:0594-2657094\n\n"    
<<"\t\t       Email:cyan_studio@163.com\n\n"    
<<"\t\t    学校地址:莆田学院36号0443信箱\t邮政编码:351100\n\n\n"<<endl;    
getch();    
exit(-1);    
}    
//////////////////////////////////////////////////////////////////////////////////    
//总菜单    
char menu()    
{    
int k=0;    
char a[3],c,i;    
system("cls");    
cout<<endl<<endl;    
cout<<"\t\t\t\tC++课程设计课题\n\n"<<endl;    
cout<<"\t\t********************************************\n"    
<<"\t\t*                                          *\n"    
<<"\t\t*                选修课小系统              *\n"    
<<"\t\t*                                          *\n"    
<<"\t\t*                                          *\n"    
<<"\t\t*     操作方式:                            *\n"    
<<"\t\t*               1.选修课系统学生端         *\n"    
<<"\t\t*                                          *\n"    
<<"\t\t*               2.选修课系统管理端         *\n"    
<<"\t\t*                                          *\n"    
<<"\t\t********************************************\n"<<endl;    
    
while(1)    
{    
cout<<"\n\t\t请选择登入方式: ";    
cin>>a;    
if(strlen(a)==1)    
{    
for(i='1';i<='2';i++)    
{    
c=i;    
if(c==a[0])    
return c;    
}    
}    
cerr<<"\n\n\t\t\t\t输入有误!\n"<<endl;    
k++;    
if(k>2)    
{    
system("cls");    
cerr<<"\n\n\n\t\t~~提示~~:错误输入次数超过三次,你将被强制退出!!\n\n"<<endl;    
cout<<"\t\t按任意键继续"<<endl;    
getch();    
tuichu();    
}    
}    
}    
///////////////////////////////////////////////////////////////////////////////////    
//选修课系统端操作    
char custom()    
{    
char A[10];    
char b;    
char i;    
int k = 0;    
system("cls");;    
cout<<"\n\n\n"    
<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"    
<<"\t\t※选修课系统学生端※\n"    
<<"\t\t※               ※\n"    
<<"\t\t※ 操作方式: ※\n"    
<<"\t\t※1.学生选课 ※\n"    
<<"\t\t※2.学生情况※\n"    
<<"\t\t※3.选课情况※\n"    
<<"\t\t※4.退出系统※\n"    
<<"\t\t※              ※\n"    
<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"<<endl;    
    
while(1)    
{    
cout<<"\t\t\t请选择操作方式: ";    
cin>>A;    
if(strlen(A)==1)    
{    
for(i='1';i<='4';i++)    
{    
b=i;    
    
if(b==A[0]) return b;    
}    
}    
cerr<<"\n\t\t\t\t输入有误!\n"<<endl;    
k++;    
if(k>2)    
{    
system("cls");    
cerr<<"\n\n\t\t\t~~提示~~:错误输入超过三次!你将被强制退出!!\n"<<endl;    
cout<<"\t\t按任意键继续"<<endl;    
getch();    
tuichu();    
}    
}    
}    
char server()    
{    
char A[10];    
char b;    
char i;    
int k = 0;    
system("cls");;    
cout<<"\n\n\n"    
<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"    
<<"\t\t※                                                  ※\n"    
<<"\t\t※                  选修课系统管理端                ※\n"    
<<"\t\t※                                                  ※\n"    
<<"\t\t※      操作方式:                                   ※\n"    
<<"\t\t※               1.增加学生      2.增加课程         ※\n"    
<<"\t\t※               3.删除学生      4.删除课程         ※\n"    
<<"\t\t※               5.填写成绩      6.更改学分         ※\n"    
<<"\t\t※               7.学生情况      8.选课情况         ※\n"    
<<"\t\t※               9.保存数据      0.退出系统         ※\n"    
<<"\t\t※                                                  ※\n"    
<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"<<endl;    
while(1)    
{    
cout<<"\t\t 请选择操作方式: ";    
cin>>A;    
if(strlen(A)==1)    
{    
for(i='0';i<='9';i++)    
{    
b=i;    
if(b==A[0])    
return b;    
}    
}    
cerr<<"\n\t\t\t\t输入有误!\n"<<endl;;    
k++;    
if(k>2)    
{    
cerr<<"错误输入超过三次!\n";    
exit(-1);    
}    
}    
}    
//////////////////////////////////////////////////////////////////////////////////    
//密码检查    
void password()    
{    
int k=0,i;    
char A[]="0411200";    
char B[10];    
char a;    
system("cls");    
for(i=0;i<8;i++)    
cout<<endl;     
    
     
    
while(k<=2)    
{    
    
printf("\t\t\t请输入管理员密码:");    
i=0;    
while(1)    
{    
a=getch();    
if(a==13)    
break;    
B[i]=a;    
i++;    
printf("*");    
}    
B[i]='\0';    
if(strcmp(A,B)==0)    
return;    
else    
{    
k++;    
cerr<<"\n\n\t\t\t密码输入错误!请重新输入!\n"<<endl;    
}    
if(k>=3)    
{    
system("cls");    
cerr<<"\n\n\t\t\t输入错误密码超过三次!请按任意键退出.."<<endl;    
getch();    
tuichu();    
}    
}    
}    
    
///////////////////////////////////////////////////////////////////////    
struct subjectdb    
{    
subject 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");    
cout<<"\n\n\t\t\t\t学生选课操作"<<endl;    
//    
studentdb *q=P->Next;    
int i;    
char N[20],M[20];    
if(q!=NULL)    
cout<<"\n\n\n\t\t所有学生名单如下:\n"<<endl;    
else    
{    
cerr<<"\n\n\n\t\t对不起,暂时没有学生名单!请按任意键继续.."<<endl;    
return 1;    
}    
while(q)    
{    
q->stu.getname(N);    
cout<<"\t\t\t\t"<<N;    
cout<<endl;    
q = q->Next ;    
}    
    
q = P->Next;    
if(q==NULL)    
return 1;    
    
cout<<"\n\n\t\t 请输入学生姓名:";    
cin>>N;    
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)    
{    
cout<<"\n\n\t\t没有这个学生!! 请按任意键返回.."<<endl;    
return 1;    
}    
else if(i>1)    
{    
cout<<"\n\n\t\t共找到"<<i<<"个姓名为"<<N<<"的学生"<<endl;    
cout<<"\t\t选择第几个:";    
cin>>k;    
}    
if(k>i||k<=0)    
{    
    
cerr<<"\n\t\t\t输入有误!按任意键继续"<<endl;    
return 1;    
}    
q = P->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())    
{    
    
cout<<"\n\t\t所选课程已满!按任意键继续"<<endl;    
return 1;    
}    
else    
{    
subjectdb *t=X->Next;    
char N1[20];    
system("cls");;    
if(t!=NULL)    
{    
cout<<"\n\n\n\t\t所有课程如下:"<<endl;    
cout<<"\n\t\t\t\t课程名称\t\t 学分"<<endl;    
}    
else    
{    
cerr<<"\n\n\n\t\t对不起,暂时没有课程"<<endl;    
return 1;    
}    
while(t)    
{    
t->sub.getkname(N1);    
cout<<"\t\t\t\t "<<N1<<setw(26-strlen(N1))<<t->sub.readcredit()<<endl;    
t = t->Next ;    
}    
char N2[20];    
cout<<"\n\t    输入你所要选的课程 : ";    
cin>>N2;    
t = X->Next;    
while(t)    
    
{    
t->sub.getkname(N1);    
if(strcmp(N1,N2)==0)    
{    
if(q->stu.findcourse(N2)==1)    
{    
cout<<"\n\t\t此课程你已选过了,不能再选.按任意键继续"<<endl;    
return 1;    
}    
t=X->Next;    
char NA[20];    
while(t)    
{    
t->sub.getkname(NA);    
if(strcmp(NA,N2)==0)    
{    
if(t->sub.retactivestudent()>=t->sub.retmaxstudent ())    
{     
    
     
    
cout<<"\n\t\t此课程已选满,不能选.按任意键继续"<<endl;    
return 1;    
}    
}    
t = t->Next;    
}    
q->stu.addcourse(N2,0.0);    
cout<<"\n\n\t\t选课成功!按任意键继续"<<endl;    
return 1;    
}    
t = t->Next;    
}    
cerr<<"\n\t\t没有此课程!按任意键继续"<<endl;    
}    
    
return 1;    
}    
q = q->Next;    
}    
return 1;    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -