#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<iomanip.h>
class student
{
protected:
int number; //學號
int pwd; //
char name[20]; //姓名
char sex[6]; //性別
char place[20]; //籍貫
char nation[6]; //民族
char birth[20]; //出生日期
int find(student **p,int num,char department,char classname,char name,char*pn="^");
char party[10]; //政治面貌
char id[20]; //身份證號
char classname[20]; //班級名稱
char telnumber[20];
char department[20]; //學院名稱
float score[3]; //成績
public:
student *next;
student(){ }
~student(){ }
char* getname(){ return name; }
char* getclassname(){return classname;}
char* getdepartment(){return department;}
int getnumber(){ return number;}
int getpwd(){return pwd;}
float getscore(int i) { return score[i];}
float getg(){ return (score[0]+score[1]+score[2]); }
//錄入資訊
void input()
{
int e=1;
cout<<"按提示輸入:"<<endl;
cout<<"請輸入學院名稱:"<<endl;
cin>>department;
cout<<"請輸入班級:"<<endl;
cin>>classname;
cout<<"請輸入編號: ";
cin>>number;
cout<<"請輸入姓名: ";
cin>>name;
do
{
cout<<"請輸入性別: ";
cin>>sex;
if(strcmp(sex,"男")==0 || strcmp(sex,"女")==0)
{
cout<<"請輸入電話號碼:";
cin>>telnumber;
cout<<"請輸入籍貫: ";
cin>>place;
cout<<"請輸入民族: ";
cin>>nation;
cout<<"請輸入生日: ";
cin>>birth;
cout<<"請輸入政治面貌: ";
cin>>party;
cout<<"請輸入身份證號: ";
cin>>id;
cout<<"請輸入數學分數: ";
cin>>score[0];
cout<<"請輸入英語分數: ";
cin>>score[1];
cout<<"請輸入計算機分數: ";
cin>>score[2];
e=0;
}
else
{
cout<<"無此型別性別!重新輸入!"<<endl;
e=1;
}
}while(e);
return ;
}
void input(ifstream & is)
{
is>>department>>classname>>number>>name>>sex>>telnumber>>place>>nation>>birth>>party>>id
>>score[0]>>score[1]>>score[2];
is.get();
}
//密碼
void password()
{
int i=0;
int pwd,key=123456; //假設密碼為123456
do
{
if(i!=0)
cout<<"密碼錯誤!"<<endl;
cout<<"第"<<i+1<<"次輸入密碼:";
cin>>pwd;
}while(pwd!=key&&++i<3);
if (i==3)
cout<<"密碼錯誤,三次機會已經用完!"<<endl<<"拒絕修改資訊!"<<endl;
else
cout<<"請選擇1或2來修改資訊。"<<endl;
}
//xiugai
void domend()
{student *p;
int num=-1,n;
char name[20];
char classname[20];
char department[20];
do
{cout<<"1:按編號修改,2:按姓名修改: ";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"請輸入編號: ";
cin>>num;
}
if(n==2)
{
cout<<"請輸入姓名: ";
cin>>name;
}
if( !find(&p,num,name[20],department[20],classname[20]) )
{
cout<<"SORRY!找不到你要修改的內容!"<<endl;
return;
}
}
//顯示資訊
void output()
{
cout<<"學生基本資訊如下:"<<endl;
cout<<"學院名稱:"<<department<<endl
<<"班級名稱:"<<classname<<endl
<<" 編號:"<<number<<endl
<<" 姓名:"<<name<<endl
<<" 性別:"<<sex
<<"電話號碼:"<<telnumber
<<" 籍貫:"<<place
<<" 民族:"<<nation
<<" 生日:"<<birth
<<" 政治面貌:"<<party
<<" 身份證號:"<<id<<endl
<<" 數學:"<<score[0]
<<" 英語:"<<score[1]
<<" 計算機:"<<score[2]
<<" 總分:"<<getg()<<endl<<endl;
}
void output(ofstream & os)
{
os<<setw(20)<<department
<<setw(20)<<classname
<<setw(6)<<number
<<setw(15)<<name
<<setw(6)<<sex
<<setw(20)<<telnumber
<<setw(20)<<place
<<setw(6)<<nation
<<setw(20)<<birth
<<setw(20)<<party
<<setw(20)<<id
<<setw(6)<<score[0]
<<setw(6)<<score[1]
<<setw(6)<<score[2]<<endl;
}
};
class school
{
public:
school(){ head=new student; head->next=NULL; key=0; }
~school(){ delete head; }
void input(); //錄入函式
void mend(); //修改函式
void del(); //洗掉函式
int find(student **p,int num,char department,char classname,char name,char*pn="^"); //子查找函式
void found(); //查找函式
void show(); //顯示函式
void count(); //統計函式
void save(); //保存函式
void begin(); //初始化函式
void clear(); //清空函式
char mainmenu(); //主選單函式
int getkey(){ return key;}
void setkey(int k){ key=k; }
private:
student *head;
int key;
};
//錄入函式
void school::input()
{
student *p,*p2=NULL;
p=head;
int n;
while(p->next)
p=p->next;
while(n)
{
p2=new student;
p2->input();
p->next=p2;
p2->next=NULL;
p=p->next;
school::setkey(1);
cout<<"按1繼續,按0回傳 : ";
cin>>n;
}
}
//子查找函式
int school::find(student **p1,int num,char department,char classname,char name,char *pn)
{
student *p;
p=head;
while(p->next)
{
(*p1)=p;
if( (p->next)->getnumber()==num||!strcmp( (p->next)->getname(),pn ) )
return 1;
p=p->next;
}
return 0;
}
//查找函式
void school::found()
{
student *p;
int num=-1,n=9;
char department[20];
char classname[20];
char name[20]="^";
do
{
cout<<"1:按學院查找,2:按班級查找3:按編號查找,:4:按姓名查找: ";
cin>>n;
}while(n<1||n>4);
if(n==1)
{
cout<<"請輸入學院名稱: ";
cin>>department;
}
if(n==2)
{
cout<<"請輸入班級: ";
cin>>classname;
}
if(n==3)
{
cout<<"請輸入編號:";
cin>>num;
}
if(n==4)
{
cout<<"請輸入姓名:";
cin>>name;
}
if(!find(&p,department[20],classname[20],num,name[20]) )
{
cout<<"SORRY!找不到你要查找的內容!"<<endl;
return;
}
(p->next)->output();
}
//洗掉函式
void school::del()
{
student *p,*p2;
int num;
char name;
char department;
char classname;
cout<<"請輸入編號: ";
cin>>num;
if( !find(&p,num,department,classname,name) )
{
cout<<"SORRY!找不到你要洗掉的內容!"<<endl;
return;
}
(p->next)->output();
p2=p->next;
p->next=p2->next;
delete p2;
school::setkey(1);
}
//顯示函式
void school::show()
{
student *p;
p=head;
while(p->next)
{
(p->next)->output();
p=p->next;
}
}
//修改函式
void school::mend()
{
student *p;
{p=head;
while(p->next)
{
(p->next)->password();
(p->next)->domend();
p=p->next;
}
(p->next)->output();
(p->next)->input();
school::setkey(1);
}
}
//保存函式
void school::save()
{
student *p;
p=head;
ofstream os("student.txt",ios::out);
if (school::getkey()==1)
{
while(p->next)
{
(p->next)->output(os);
p=p->next;
}
}
cout<<"檔案已保存! "<<endl;
school::setkey(0);
}
//初始化函式
void school::begin()
{
student *p,*p2;
p=head;
clear();
long t;
ifstream is("student.txt",ios::in);
if(!is)
{
ofstream os("student.txt",ios::out);
os.close();
return ;
}
int num=-1;
while(1)
{
num=-1;
t=is.tellg();
is>>num;
is.seekg(t);
if(num<0)
{
is.close();
return;
}
p2=new student;
p2->input(is);
p->next=p2;
p2->next=NULL;
p=p->next;
}
}
//清空函式
void school::clear()
{
student *p,*p2;
p=head->next;
while( p )
{
p2=p;
p=p->next;
delete p2;
}
}
//統計函式
void school::count()
{
student *p;
p=head;
int n=0;
double g[3]={0,0,0};
float j[3]={0,0,0};
while(p->next)
{
p=p->next;
n++;
for(int i=0;i<3;i++)
{
g[i]=g[i]+(p->getscore(i) );
(p->getscore(i) )>=60? i++ : 0 ;
}
}
cout<<"數學總分:"<<g[0]<<" 平均分:"<<g[0]/n
<<" 及格率:"<<j[0]/n<<endl<<"英語總分:"<<g[1]
<<" 平均分:"<<g[1]/n<<" 及格率:"<<j[1]/n<<endl
<<"計算機總分: "<<g[2]<<" 平均分: "<<g[2]/n
<<" 及格率:"<<j[2]/n<<endl;
}
//主選選單函式
char school::mainmenu()
{
char n[6];
cout<<"\n\n 歡迎進入高校學籍管理系統"<<endl<<endl
<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" * * 1: 錄入學生資訊 * *"<<endl
<<" * * 2: 顯示學生資訊 * *"<<endl
<<" * * 3: 查找學生資訊 * *"<<endl
<<" * * 4: 洗掉學生資訊 * *"<<endl
<<" * * 5: 修改學生資訊 * *"<<endl
<<" * * 6: 統計學生成績 * *"<<endl
<<" * * 7: 保存學生資訊 * *"<<endl
<<" * * 0: 退出系統 * *"<<endl
<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" 請選擇:";
cin>>n;
return n[0];
}
int main()
{
school p;
int k=1;
char n;
p.begin();
while(k==1)
{
n=p.mainmenu();
switch(n)
{
case '1':p.input(); break;
case '2':p.show(); break;
case '3':p.found(); break;
case '4':p.del(); break;
case '5':p.mend(); break;
case '6':p.count(); break;
case '7':p.save(); break;
case '0':
if(p.getkey()==1)
{
cout<<"\t\t\t是否保存? 1 : 保存 0:不保存 : ";
cin>>k;
if(k==1)
p.save();
}
p.clear();
k=0;
break;
}
}
return 0;}
uj5u.com熱心網友回復:
外部呼叫了類內部的受保護的成員函式???uj5u.com熱心網友回復:
沒看出跟VC/MFC有啥關系。uj5u.com熱心網友回復:
把 student 類的函式和成員改成public試試uj5u.com熱心網友回復:
student類中這個int find(student **p,int num,char department,char classname,char name,char*pn="^");函式沒有定義。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/116860.html
標籤:進程/線程/DLL
上一篇:隨機優化問題設計演算法
