?? main.cpp
字號:
//////////////////////////////////////////////////////////////////////////
//頭文件
#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※ 操作方式: ※\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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -