#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
class student
{
protected:
int number; char name[20];
char sex[6]; char age[20];
char classid[20];char major[20];
char department[20];
public:
student *next;
student(){ }
~student(){ }
char* getname(){ return name; }
int getnumber(){ return number;}
char* getclassid(){return classid;}
char*getsex(){return sex;}
void input()
{
int e=1;
cout<<"\t\t輸入編號: "; cin>>number;
cout<<"\t\t輸入姓名: "; cin>>name;
do
{
cout<<"\t\t輸入性別: ";
cin>>sex;
if(strcmp(sex,"男")==0 || strcmp(sex,"女")==0)
{
cout<<"\t\t輸入年齡: ";cin>>age;
cout<<"\t\t輸入班級號:";cin>>classid;
cout<<"\t\t輸入專業:";cin>>major;
cout<<"\t\t輸入系:";cin>>department;
e=0;}
else
{cout<<"\t\t\t無此型別性別!重新輸入!"<<endl;
e=1; }
}while(e);
return ;
}
void input(ifstream & is)
{is>>number>>name>>sex>>age>>classid>>major>>department;
is.get(); }
void output()
{cout<<"學生基本資訊如下:"<<endl;
cout<<"編號:"<<number<<" 姓名:"<<name<<" 性別:"<<sex <<"年齡:"<<age<<"班級號:"<<classid<<"專業:"<<major<<"所在系:"<<department<<endl;
}
void output(ofstream & os)
{ os<<setw(6)<<number <<setw(15)<<name<<setw(20)<<age<<setw(20)<<classid<<setw(20)<<major<<setw(20)<<department<<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 *pn="^",char*ps="^",char*pc="^");
void found();
void show();
void save();
void begin();
void clear();
void count();
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<<"\t\t\t按1繼續,按0回傳 : "; cin>>n;
}
}
int school::find(student **p1,int num,char *pn,char*ps,char*pc)
{ student *p;
p=head;
while(p->next)
{
(*p1)=p;
if( (p->next)->getnumber()==num||!strcmp( (p->next)->getname(),pn )||!strcmp((p->next)->getsex(),ps)||!strcmp((p->next)->getclassid(),pc) )
return 1; p=p->next;
}
return 0; }
void school::found()
{ student *p;
int num=-1,n=9; char name[20]="^"; char sex[6]="^";char classid[20]="^";
do
{ cout<<"\t\t1:按編號查找,2:按姓名查找,3.按性別查找,4.按班級號查找:";
cin>>n;
}while(n<1||n>4);
if(n==1)
{ cout<<"\t\t\t輸入編號: ";
cin>>num;}
if(n==2)
{ cout<<"\t\t\t輸入姓名: ";
cin>>name; }
if(n==3)
{ cout<<"\t\t\t輸入性別:";
cin>>sex;}
if(n==4)
{ cout<<"\t\t\t輸入班級號:";
cin>>classid;}
if(!find(&p,num,name) ) //呼叫查找子函式
{ cout<<"\t\t找不到你要查找的內容!"<<endl;
return;}
(p->next)->output();
}
void school::del()
{ student *p,*p2; int num;
cout<<"\t\t\t輸入編號: "; cin>>num;
if( !find(&p,num,"^") )
{ cout<<"\t\t找不到你要洗掉的內容!"<<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; int num=-1,n;
char name[20]="^";
do
{ cout<<"\t\t1:按編號修改,2:按姓名修改: ";
cin>>n;
}while(n<1||n>2);
if(n==1)
{ cout<<"\t\t\t輸入編號: ";
cin>>num;
}
if(n==2)
{cout<<"\t\t\t輸入姓名: ";
cin>>name;
}
if( !find(&p,num,name) )
{ cout<<"\t\t找不到你要修改的內容!"<<endl;
return;
}
(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<<"\t\t\t檔案已保存! "<<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() //這段統計函式有點問題,不太會改
{if(head==NULL){cout<<"已經為空!\n";}
cout<<"請選擇統計型別"<<endl;
cout<<"1 按性別統計"<<endl;
cout<<"2 按班號統計"<<endl;
cout<<"3 按年齡統計"<<endl;
cout<<"4 按系別統計"<<endl;
int tp;int sum=0;int i=0;int j=0;
cin>>tp;
if(tp==1){
{
if(p->next->getsex()=="男") {
i++;
} else if(p->get_next()->get->sex()=="女") {
j++;}
p=p->get_next();}
sum=i+j;
cout<<"學生的數量為:"<<sum<<endl;
cout<<"男生數量為:"<<i<<endl;
cout<<"女生數量為:"<<j<<endl;
}
if(tp==2){
{if(p->next()->getclassid()=="一班"){
i++;
}else if(p->get_next()->getclassid()=="二班"){
j++; }
p=p->get_next();}
cout<<cout<<"學生的數量為:"<<sum<<endl;
cout<<"一班數量為:"<<i<<endl;
cout<<"二班數量為:"<<j<<endl;
}
if(tp==3){
{if(p->next->getclassid()=="年齡為18歲"){
i++;
}else if(p->next->getclassid()=="年齡為19歲"){
j++; }
p=p->get_next();}
cout<<cout<<"學生的數量為:"<<sum<<endl;
cout<<"18歲學生數量為:"<<i<<endl;
cout<<"19歲學生數量為:"<<j<<endl;
}
if(tp==2){
{if(p->next->getclassid()=="計算機系"){
i++;
}else if(p->next->getclassid()=="非計算機系"){
j++; }
p=p->next();}
cout<<cout<<"學生的數量為:"<<sum<<endl;
cout<<"計算機系學生數量為:"<<i<<endl;
cout<<"非計算機系學生數量為:"<<j<<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
<<" * * 0: 退出系統 * *"<<endl
<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl
<<" 請選擇:";
cin>>n;
return n[0];
}
//主函式
void main()
{school pp;
int k=1; char n; pp.begin();
while(k==1)
{ n=pp.mainmenu();
switch(n)
{ case '1':pp.input(); break;
case '2':pp.show(); break;
case '3':pp.found(); break;
case '4':pp.del(); break;
case '5':pp.mend(); break;
case '6':pp.count();break;
case '0':
if(pp.getkey()==1)
{ cout<<"\t\t\t是否保存? 1 : 保存 0:不保存 : ";
cin>>k;
if(k==1)
pp.save();
}
pp.clear();
k=0;
break; }}}
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
void school::count() //這段統計函式有點問題,不太會改{if(head==NULL){cout<<"已經為空!\n";}
cout<<"請選擇統計型別"<<endl;
cout<<"1 按性別統計"<<endl;
cout<<"2 按班號統計"<<endl;
cout<<"3 按年齡統計"<<endl;
cout<<"4 按系別統計"<<endl;
int tp;int sum=0;int i=0;int j=0;
cin>>tp;
student * p = head->next; //少了這么一句, p就是沒有定義的,后面問題都是對p的使用,自己慢慢改吧
if(tp==1){
{
if(p->next->getsex()=="男") {
uj5u.com熱心網友回復:
除錯的不報錯了,但是功能沒有除錯#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
class student
{
protected:
int number; char name[20];
char sex[6]; char age[20];
char classid[20]; char major[20];
char department[20];
public:
student *next;
student() { }
~student() { }
char* getname() { return name; }
int getnumber() { return number; }
char* getclassid() { return classid; }
char*getsex() { return sex; }
void input()
{
int e = 1;
cout << "\t\t輸入編號: "; cin >> number;
cout << "\t\t輸入姓名: "; cin >> name;
do
{
cout << "\t\t輸入性別: ";
cin >> sex;
if (strcmp(sex, "男") == 0 || strcmp(sex, "女") == 0)
{
cout << "\t\t輸入年齡: "; cin >> age;
cout << "\t\t輸入班級號:"; cin >> classid;
cout << "\t\t輸入專業:"; cin >> major;
cout << "\t\t輸入系:"; cin >> department;
e = 0;
}
else
{
cout << "\t\t\t無此型別性別!重新輸入!" << endl;
e = 1;
}
} while (e);
return;
}
void input(ifstream & is)
{
is >> number >> name >> sex >> age >> classid >> major >> department;
is.get();
}
void output()
{
cout << "學生基本資訊如下:" << endl;
cout << "編號:" << number << " 姓名:" << name << " 性別:" << sex << "年齡:" << age << "班級號:" << classid << "專業:" << major << "所在系:" << department << endl;
}
void output(ofstream & os)
{
os << setw(6) << number << setw(15) << name << setw(20) << age << setw(20) << classid << setw(20) << major << setw(20) << department << 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 *pn = "^", char*ps = "^", char*pc = "^");
void found();
void show();
void save();
void begin();
void clear();
void count();
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 = 1;
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 << "\t\t\t按1繼續,按0回傳 : "; cin >> n;
}
}
int school::find(student **p1, int num, char *pn, char*ps, char*pc)
{
student *p;
p = head;
while (p->next)
{
(*p1) = p;
if ((p->next)->getnumber() == num || !strcmp((p->next)->getname(), pn) || !strcmp((p->next)->getsex(), ps) || !strcmp((p->next)->getclassid(), pc))
return 1; p = p->next;
}
return 0;
}
void school::found()
{
student *p;
int num = -1, n = 9; char name[20] = "^"; char sex[6] = "^"; char classid[20] = "^";
do
{
cout << "\t\t1:按編號查找,2:按姓名查找,3.按性別查找,4.按班級號查找:";
cin >> n;
} while (n<1 || n>4);
if (n == 1)
{
cout << "\t\t\t輸入編號: ";
cin >> num;
}
if (n == 2)
{
cout << "\t\t\t輸入姓名: ";
cin >> name;
}
if (n == 3)
{
cout << "\t\t\t輸入性別:";
cin >> sex;
}
if (n == 4)
{
cout << "\t\t\t輸入班級號:";
cin >> classid;
}
if (!find(&p, num, name)) //呼叫查找子函式
{
cout << "\t\t找不到你要查找的內容!" << endl;
return;
}
(p->next)->output();
}
void school::del()
{
student *p, *p2; int num;
cout << "\t\t\t輸入編號: "; cin >> num;
if (!find(&p, num, "^"))
{
cout << "\t\t找不到你要洗掉的內容!" << 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; int num = -1, n;
char name[20] = "^";
do
{
cout << "\t\t1:按編號修改,2:按姓名修改: ";
cin >> n;
} while (n<1 || n>2);
if (n == 1)
{
cout << "\t\t\t輸入編號: ";
cin >> num;
}
if (n == 2)
{
cout << "\t\t\t輸入姓名: ";
cin >> name;
}
if (!find(&p, num, name))
{
cout << "\t\t找不到你要修改的內容!" << endl;
return;
}
(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 << "\t\t\t檔案已保存! " << 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() //這段統計函式有點問題,不太會改
{
if (head == NULL) { cout << "已經為空!\n"; }
cout << "請選擇統計型別" << endl;
cout << "1 按性別統計" << endl;
cout << "2 按班號統計" << endl;
cout << "3 按年齡統計" << endl;
cout << "4 按系別統計" << endl;
int tp; int sum = 0; int i = 0; int j = 0;
student * p = head->next;
cin >> tp;
if (tp == 1) {
{
if (p->next->getsex() == "男") {
i++;
}
else if (p->next->getsex() == "女") {
j++;
}
p = p->next; }
sum = i + j;
cout << "學生的數量為:" << sum << endl;
cout << "男生數量為:" << i << endl;
cout << "女生數量為:" << j << endl;
}
if (tp == 2) {
{if (p->next->getclassid() == "一班") {
i++;
}
else if (p->next->getclassid() == "二班") {
j++;
}
p = p->next; }
cout << "學生的數量為:" << sum << endl;
cout << "一班數量為:" << i << endl;
cout << "二班數量為:" << j << endl;
}
if (tp == 3) {
{if (p->next->getclassid() == "年齡為18歲") {
i++;
}
else if (p->next->getclassid() == "年齡為19歲") {
j++;
}
p = p->next; }
cout << "學生的數量為:" << sum << endl;
cout << "18歲學生數量為:" << i << endl;
cout << "19歲學生數量為:" << j << endl;
}
if (tp == 2) {
{if (p->next->getclassid() == "計算機系") {
i++;
}
else if (p->next->getclassid() == "非計算機系") {
j++;
}
p = p->next; }
cout << "學生的數量為:" << sum << endl;
cout << "計算機系學生數量為:" << i << endl;
cout << "非計算機系學生數量為:" << j << 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
<< " * * 0: 退出系統 * *" << endl
<< " * * * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl
<< " * * * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl
<< " 請選擇:";
cin >> n;
return n[0];
}
int main()
{
school pp;
int k = 1; char n; pp.begin();
while (k == 1)
{
n = pp.mainmenu();
switch (n)
{
case '1':pp.input(); break;
case '2':pp.show(); break;
case '3':pp.found(); break;
case '4':pp.del(); break;
case '5':pp.mend(); break;
case '6':pp.count(); break;
case '0':
if (pp.getkey() == 1)
{
cout << "\t\t\t是否保存? 1 : 保存 0:不保存 : ";
cin >> k;
if (k == 1)
pp.save();
}
pp.clear();
k = 0;
break;
}
}
return 0;
}
VS2015 C++環境
uj5u.com熱心網友回復:
謝謝,我試試uj5u.com熱心網友回復:
我試了,為什么統計函式無法實作統計的功能,我運行了前面的都沒有問題,統計函式運行后統計的結果都是0轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72796.html
標籤:C++ 語言
上一篇:資料結構運算式求值
下一篇:C++求助啊(新手越寫越亂了)
