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

📄 学生选课系统.txt

📁 简单的类与对象的内容
💻 TXT
📖 第 1 页 / 共 4 页
字号:
#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; 
} 
 
int menu_1_2(studentdb *P,subjectdb *X)   //学生情况 
{ 

⌨️ 快捷键说明

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