?? main.cpp
字號:
return 1;
}
q = q->Next;
}
return 1;
}
int menu_1_2(studentdb *P,subjectdb *X) //學生情況
{
studentdb *q=P->Next;
char N[20];
system("cls");
cout<<"\n\n\t\t\t\t學生情況操作"<<endl;
int i;
if(q!=NULL)
{
cout<<"\n\n\n\t\t所有學生選課信息如下:\n"<<endl<<endl;
cout<<"\t\t 姓名\t\t\t選課情況\n"<<endl;
}
else
{
cerr<<"\n\n\n\t\t對不起,暫時沒有學生名單!!請按任意鍵繼續.."<<endl;
return 1;
}
while(q)
{
q->stu.getname(N);
cout<<"\t\t "<<N<<setw(25-strlen(N))<<" 已選 "<<q->stu.retfactcourse()<<" 門課 "<<endl;
q = q->Next ;
}
char M[20];
cout<<"\n\t\t輸入要查看的學生姓名:";
cin>>M;
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)
{
cout<<"\n\t\t\t沒找到這個學生!!請按任意鍵繼續.."<<endl;
return 1;
}
else if(i>1)
{
cout<<"\n\t\t共找到"<<i<<"個姓名為"<<M<<"的學生"<<endl;
cout<<"\t\t選擇第幾個:";
cin>>k;
}
if(k>i||k<=0)
{
cerr<<"\n\t\t\t輸入有誤!按任意鍵繼續.."<<endl;
return 1;
}
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==NULL)
{
cout<<"\n\n\n\t\t\t"<<N<<"同學你還未選課! 請按任意鍵繼續.."<<endl;
return 1;
}
if (T!=NULL)
T = T->Next;
cout<<"\n\n\n\t\t"<<N<<"同學你已選"<<q->stu.retfactcourse()<<"門課,具體如下\n\n"<<endl;
cout<<"\t\t\t課程名稱\t\t成績\n"<<endl;
while(T)
{
cout<<"\t\t\t "<<T->cname<<setw(25-strlen(T->cname))<<T->grade<<endl;
T = T->Next;
}
j=0;
}
q = q->Next;
}
cout<<"\n\t\t請按任意鍵繼續..."<<endl;
return 1;
}
int menu_1_3(subjectdb *P) //選課情況
{
subjectdb *q=P->Next;
char N[20];
system("cls");
cout<<"\n\n\t\t\t\t選課情況操作"<<endl;
if(q!=NULL)
{
cout<<"\n\n\n\t\t所有選課情況如下:\n"<<endl;
cout<<"\n\t\t\t課程名稱\t\t選課人數\n"<<endl;
}
else
{
cerr<<"\n\n\n\t\t對不起,暫時沒有課程!!請按任意鍵繼續.."<<endl;
return 1;
}
while(q)
{
q->sub.getkname(N);
cout<<"\t\t\t"<<N<<setw(28-strlen(N))<<q->sub.retactivestudent()<<endl;
q = q->Next ;
}
cout<<"\n\t\t請按任意鍵繼續.."<<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 N[20];
system("cls");;
cout<<"\n\n\t\t\t\t增加學生操作\n"<<endl;
cout<<"\n\n\t\t請輸入學生姓名:";
cin>>N;
cout<<endl<<"\t\t增加學生操作成功,按任意鍵繼續"<<endl;
studentdb *newnode = new studentdb;
newnode->Next = P->Next ;
newnode->stu.readname(N);
P->Next = newnode ;
return 1;
}
int menu_2_2(subjectdb *P) //增加課程
{
float k;
char N[20],M[20];
system("cls");;
cout<<"\n\n\t\t\t\t增加課程操作\n"<<endl;
cout<<"\n\n\t\t 請輸入課程名稱:";
cin>>N;
cout<<endl;
subjectdb *q = P->Next;
while(q)
{
q->sub.getkname(M);
if(strcmp(N,M)==0)
{
cout<<"\n\t\t此課程已經存在,按任意鍵繼續"<<endl;
return 1;
}
q = q->Next;
}
cout<<"\t\t輸入此課程的學分:";
cin>>k;
cout<<"\n\t\t增加課程操作成功,按任意鍵繼續"<<endl;
subjectdb *newnode = new subjectdb;
newnode->Next = P->Next ;
newnode->sub.setkname(N);
newnode->sub.getcredit(k);
P->Next = newnode ;
return 1;
}
int menu_2_3(studentdb *P) //刪除學生
{
system("cls");
cout<<"\n\n\t\t\t\t刪除學生操作"<<endl;
menu_2_7(P);
studentdb *q = P->Next;
if(q==NULL)
return 1;
int i;
char N[20],M[20];
cout<<"\n\t請輸入要刪除的學生姓名 :";
cin>>N;
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)
{
cerr<<"\n\t\t沒有這個學生!!請按任意鍵繼續.."<<endl;
return 1;
}
else if(i>1)
{
cout<<"\n\t\t共找到"<<i<<"個姓名為"<<N<<"的學生"<<endl;
cout<<"\n\t\t要刪除第幾個:";
cin>>k;
}
if(k>i||k<=0)
return 1;
q = P->Next;
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);
cout<<"\n\t\t刪除學生操作成功,按任意鍵繼續.."<<endl;
return 1;
}
q = q->Next;
R = R->Next;
}
return 1;
}
int menu_2_4(subjectdb *P) //刪除課程
{
subjectdb *q=P->Next;
char N[20];
system("cls");;
cout<<"\n\n\t\t\t\t刪除課程操作"<<endl;
if(q!=NULL)
cout<<"\n\n\n\t\t所有課程如下:\n"<<endl;
else
{
cerr<<"\n\n\n\t\t對不起,暫時沒有課程!!請按任意鍵繼續.."<<endl;
return 1;
}
while(q)
{
q->sub.getkname(N);
cout<<"\t\t\t\t"<<N<<endl;
q = q->Next ;
}
q = P->Next;
subjectdb *R = P;
if(q==NULL)
return 1;
char M[20];
cout<<"\n\t 請輸入要刪除的課程 :";
cin>>M;
while(q)
{
q->sub.getkname(N);
if(strcmp(N,M)==0)
{
R->Next = q->Next;
free(q);
cout<<"\n\t\t刪除課程操作成功,按任意鍵繼續"<<endl;
return 1;
}
q = q->Next;
R = R->Next;
}
cerr<<"\n\t\t沒有此課程!!\t請按任意鍵繼續.."<<endl;
return 1;
}
int menu_2_5(studentdb *X,subjectdb *P) //填寫成績
{
subjectdb *q=P->Next;
char M[20],N[20],NA[20];
float score;
system("cls");
cout<<"\n\n\t\t\t\t 填寫成績操作\n"<<endl;
if(q!=NULL)
cout<<"\n\t\t\t課程名稱\t\t選課人數\n"<<endl;
else
{
cout<<"\n\n\n\t\t對不起,暫時沒有任何選修課程。請按任意鍵繼續.."<<endl;
return 1;
}
while(q)
{
q->sub.getkname(N);
cout<<"\t\t\t"<<N<<setw(28-strlen(N))<<q->sub.retactivestudent()<<endl;
q = q->Next ;
}
q = P->Next;
cout<<"\n\t請輸入課程名稱 :";
cin>>M;
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)
{
cout<<"\n\n\t\t請填寫選修"<<M<<"的學生成績\n"<<endl;
cout<<"\n\t\t\t姓名\t\t成績"<<endl;
}
if(K==NULL)
cerr<<"\n\t\t\t無任何信息!!請按任意鍵繼續.."<<endl;
while(K)
{
cout<<"\n\t\t\t"<<K->tname<<"\t\t ";
cin>>score;
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)
cout<<"\n\t\t填寫成績完畢!!請按任意鍵繼續.."<<endl;
return 1;
}
q = q->Next;
}
cerr<<"\n\t\t沒有此課程!!請按任意鍵繼續.."<<endl;
return 1;
}
int menu_2_6(subjectdb *P) //更改學分
{
float k;
system("cls");
cout<<"\n\n\n\t\t\t\t更改學分操作\n"<<endl;
subjectdb *q = P->Next;
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->sub.getkname(N);
cout<<"\t\t\t\t "<<N<<endl;
q = q->Next ;
}
q = P->Next;
cout<<"\n\n\n\t\t請輸入要改的課程 :";
cin>>M;
while(q)
{
q->sub.getkname(N);
if(strcmp(N,M)==0)
{
cout<<"\n\t\t\t原來學分為 :"<<q->sub.readcredit()<<endl;
cout<<"\n\t\t\t現要更改為 :";
cin>>k;
q->sub.getcredit(k);
cout<<"\n\t\t更改課程學分成功,按任意鍵繼續"<<endl;
return 1;
}
q = q->Next;
}
cerr<<"\n\t\t無此課程!!請按任意鍵繼續.."<<endl;
return 1;
}
int menu_2_7(studentdb *P) //學生情況
{
studentdb *q=P->Next;
char N[20];
system("cls");
cout<<"\n\n\n\t\t\t\t學生情況操作\n"<<endl;
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 ;
}
cout<<"\n\t\t按任意鍵繼續.."<<endl;
return 1;
}
int menu_2_8(subjectdb *P) //選課情況
{
subjectdb *q = P->Next;
char M[20],N[20];
system("cls");
cout<<"\n\n\t\t\t\t選課情況操作"<<endl;
if(q!=NULL)
{
cout<<"\n\n\n\t\t所有選課情況如下:\n"<<endl;
cout<<"\n\t\t\t課程名稱\t\t選課人數\n"<<endl;
}
else
{
cerr<<"\n\n\n\t\t對不起,暫時沒有課程!!請按任意鍵繼續.."<<endl;
return 1;
}
while(q)
{
q->sub.getkname(N);
cout<<"\t\t\t"<<N<<setw(28-strlen(N))<<q->sub.retactivestudent()<<endl;
q = q->Next ;
}
q = P->Next;
cout<<"\n\t請輸入課程名稱 :";
cin>>M;
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)
{
cerr<<"\n\n\t無任何選課信息!!\t請按任意鍵繼續.."<<endl;
return 1;
}
cout<<"\n\n\n\t\t選修"<<M<<"課的學生名單如下:\n"<<endl;
cout<<"\n\t\t\t姓名\t\t 成績"<<endl;
while(K)
{
cout<<"\n\t\t\t"<<K->tname<<setw(20-strlen(K->tname))<<K->result<<endl;
K = K->Next;
}
cout<<"\n\t\t請按任意鍵繼續.."<<endl;
return 1;
}
q = q->Next;
}
cerr<<"\n\t\t無此課程!!\t請按任意鍵繼續.."<<endl;
return 1;
}
int menu_2_9(studentdb *Y,subjectdb *P) //保存數據
{
studentdb *Z = Y->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 *)&(Z->stu),sizeof(Z->stu));
int time = Z->stu.retfactcourse();
course *co = Z->stu.retroot(),*co1;
if(co!=NULL)
co1 = co->Next;
while(time)
{
file2.write((char *)(co1),sizeof(*co1));
co1 = co1->Next;
time = time - 1;
}
Z = Z->Next;
}
file2.close ();
file1.close();
cout<<"\n\n\n\t\t\t保存數據成功!按任意鍵繼續.."<<endl;
return 1;
}
int menu_2_0() //退出系統
{
tuichu();
return 0;
}
int main()
{
subjectdb *P = new subjectdb,*Q=P;
P->Next = NULL;
subject M;
fstream file("subject.txt",ios::in);
while(1)
{
file.read((char *)&M,sizeof(M));
if(!file) break;
Q->Next = new subjectdb;
Q->Next ->Next = NULL;
Q->Next ->sub = M;
Q = Q->Next;
}
file.close ();
studentdb *Y = new studentdb,*X=Y;
Y->Next=NULL;
student N;
course O;
fstream file1("student.txt",ios::in);
fstream file2("course.txt",ios::in);
while(1)
{
file1.read((char *)&N,sizeof(N));
if(!file1) break;
Y->Next = new studentdb;
Y->Next ->Next = NULL;
Y->Next ->stu = N;
int time = N.retfactcourse();
Y->Next->stu.clrroot ();
while(time)
{
file2.read ((char *)&O,sizeof(course));
if(!file2) break;
Y->Next->stu.addcourse(O.cname ,O.grade);
time--;
}
Y=Y->Next;
}
file2.close ();
file1.close ();
Q=P->Next;
while(Q)
{
Q->sub.clractivestudnet();
Q->sub.findstudent(X);
Q = Q->Next;
}
char c;
char b;
int br=1;
b = menu();
if(b=='1')
{
while(1)
{
c = custom();
switch(c)
{
case '1':br = menu_1_1(X,P);getch();break; //學生選課
case '2':br = menu_1_2(X,P);getch();break; //學生情況
case '3':br = menu_1_3(P);getch(); break; //選課情況
case '4':br = menu_1_4(X,P); break; //退出系統
}
if (br == 0)
break;
}
}
if(b=='2')
{
password();
while(1)
{
c = server();
switch(c)
{
case '1':br = menu_2_1(X);getch(); break; //增加學生
case '2':br = menu_2_2(P);getch(); break; //增加課程
case '4':br = menu_2_4(P);getch(); break; //刪除課程
case '3':br = menu_2_3(X);getch(); break; //刪除學生
case '5':br = menu_2_5(X,P);getch();break; //填寫成績
case '6':br = menu_2_6(P);getch(); break; //更改學分
case '7':br = menu_2_7(X);getch(); break; //學生情況
case '8':br = menu_2_8(P);getch(); break; //選課情況
case '9':br = menu_2_9(X,P);getch();break; //保存數據
case '0':br = menu_2_0();break; //退出系統
}
if (br == 0)
break;
}
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -