電 話:18937133779
網(wǎng) 址:http://www.tpiin.com
郵 箱:zboao@qq.com
# include<iostream.h>
# include<string.h>
# include<stdio.h>
# include<stdlib.h>
# include<fstream.h>
//*****定義一個學(xué)生原子的的數(shù)據(jù)結(jié)構(gòu)*****//
struct stuatom
{
char *name;
int id;
char sex;
float math, eng, comp, totll, aver;
void show();
void setup();
};
//*********定義一系列對學(xué)生的操作**********//
class student
{
private:
stuatom ob[100];
int stulen;
public:
student();
void input();
void order();
void save();
void Query();
void read();
void add();
void del();
};
//********對學(xué)生數(shù)據(jù)的初始化(類的構(gòu)造函數(shù))**********//
student::student()
{
//用for循環(huán)對全部數(shù)組中的數(shù)據(jù)初始化
for(int i=0;i<100;i++)
{
ob[i].math=ob[i].eng=ob[i].comp =ob[i].totll =ob[i].aver =0;
ob[i].id =0;
ob[i].sex =' ';
ob[i].name =NULL;
}
this->stulen =0;
}
//********輸入學(xué)生的數(shù)據(jù),并判斷是否在規(guī)定數(shù)據(jù)域內(nèi)*******//
void stuatom::setup()
{
char n[20]; char s;
int b;
//如果輸入學(xué)好在數(shù)據(jù)域內(nèi),跳出循環(huán)并且賦值。
//如果不再數(shù)據(jù)域內(nèi),一直循環(huán)到輸入數(shù)據(jù)符合數(shù)據(jù)域為止
do {
cout<<" 學(xué)號: ";
cin>>b;
if(b>1020||b<1001)
cout<<"Bad data input!!"<<endl<<endl;
}while (b<1001||b>1020);
id=b;
//如果輸入學(xué)好在數(shù)據(jù)域內(nèi),跳出循環(huán)并且賦值。
//如果不再數(shù)據(jù)域內(nèi),一直循環(huán)到輸入數(shù)據(jù)符合數(shù)據(jù)域為止
do{
name=new char[strlen(n)+1];
cout<<" 姓名: ";
cin>>n;
if( strlen(n)>6 || strlen(n)<4 )
cout<<"Bad data input!!"<<endl<<endl;
}while ( strlen(n)>6 && strlen(n)<4 );
strcpy(name,n);
cout<<" 性別(m/f):" ;
cin>>s;
//如果輸入學(xué)好在數(shù)據(jù)域內(nèi),跳出循環(huán)并且賦值。
//如果不再數(shù)據(jù)域內(nèi),一直循環(huán)到輸入數(shù)據(jù)符合數(shù)據(jù)域為止
while (s!='m' && s!='f')
{
cout<<"Bad data input!!"<<endl<<endl;
cout<<" 性別(m/f):";
cin>>s;
}
sex=s;
float m, e, co;
cout<<" 數(shù)學(xué): ";
cin>>m;
//如果輸入學(xué)好在數(shù)據(jù)域內(nèi),跳出循環(huán)并且賦值。
//如果不再數(shù)據(jù)域內(nèi),一直循環(huán)到輸入數(shù)據(jù)符合數(shù)據(jù)域為止
while (m<0 || m>100)
{
cout<<"Bad data input!!"<<endl<<endl;
cout<<" 數(shù)學(xué): ";
cin>>m;
}
math=m;
cout<<" 英語: ";
cin>>e;
//如果輸入學(xué)好在數(shù)據(jù)域內(nèi),跳出循環(huán)并且賦值。
//如果不再數(shù)據(jù)域內(nèi),一直循環(huán)到輸入數(shù)據(jù)符合數(shù)據(jù)域為止
while (e<0 || e>100)
{
cout<<"Bad data input!!"<<endl<<endl;
cout<<" 英語: ";
cin>>e;
}
eng=e;
cout<<" 計算機: ";
cin>>co;
//如果輸入學(xué)好在數(shù)據(jù)域內(nèi),跳出循環(huán)并且賦值。
//如果不再數(shù)據(jù)域內(nèi),一直循環(huán)到輸入數(shù)據(jù)符合數(shù)據(jù)域為止
while (co<0 || co>100)
{
cout<<"Bad data input!!"<<endl<<endl;
cout<<" 計算機: ";
cin>>co;
}
comp=co;
totll=math+eng+comp;
aver=(math+eng+comp)/3;
}
//*******按照規(guī)定格式把該學(xué)生的數(shù)據(jù)顯示在屏幕上******//
void stuatom::show()
{
cout.setf(ios::left);
cout.width(6);
cout<<""<<id<<" ";
cout.width(8);
cout<<name;
cout.width(10);
cout<<sex;
cout.width(9);
cout<<math;
cout.width(9);
cout<<eng;
cout.width(11);
cout<<comp;
cout.width(10);
cout<<totll<<aver<<endl;
}
//**************輸入學(xué)生的數(shù)據(jù)***********************//
void student::input()
{
int n;
cout<<endl<<"輸入將要錄入的學(xué)生數(shù)目: ";
cin>>n;
int j;
//通過循環(huán)輸入要求輸入學(xué)生個數(shù)的學(xué)生的數(shù)據(jù)。
for(j=0; j<n; j++)
{
cout<<" 輸入學(xué)生信息 "<<j<<endl;
ob[j].setup();
}
this->stulen=n; //學(xué)生個數(shù)賦值
//學(xué)生數(shù)據(jù)顯示格式
system("cls");
cout<<endl<<"----------------------------- 學(xué)生信息表 ------------------------------------"<<endl;
cout<<endl<<" 學(xué)號 姓名 性別 數(shù)學(xué) 英語 計算機 總分 平均分"<<endl;
//通過循環(huán)輸出所有學(xué)生數(shù)據(jù)。
for(j=0; j<n; j++)
{
ob[j].show();
}
cout<<endl;
cout<<" 是否保存? (Y/N): ";
char Y;
cin>>Y;
system("cls");
}
//**************按照一定格式顯示所要查詢學(xué)生的信息。**************//
void student::Query()
{
int x , i;
cout<<endl<<" 輸入要查詢學(xué)生的學(xué)號: ";
cin>>x;
cout<<endl<<" 學(xué)號 姓名 性別 數(shù)學(xué) 英語 計算機 總分 平均分"<<endl;
for(i=0;i<=this->stulen ;i++)
{ if (x==ob[i].id)
{
cout.setf(ios::left);
cout.width(6);
cout<<""<<ob[i].id<<" ";
cout.width(8);
cout<<ob[i].name;
cout.width(10);
cout<<ob[i].sex;
cout.width(9);
cout<<ob[i].math;
cout.width(9);
cout<<ob[i].eng;
cout.width(11);
cout<<ob[i].comp;
cout.width(10);
cout<<ob[i].totll<<ob[i].aver<<endl;
}
}
getchar();
}
//*******************保存學(xué)生數(shù)據(jù)**************************//
void student::save()
{
int i;
ofstream outfile;
outfile.open("list.txt",ios::trunc);
if(!outfile)
{
cout<<"Cannot open output file!\n,";
}
//通過循環(huán)把所有的學(xué)生數(shù)據(jù)保存在list.txt里邊。
for(i=0; i<this->stulen; i++)
{
outfile<<ob[i].id<<" "<<ob[i].name<<" "<<ob[i].sex<<" "<<
ob[i].math<<" "<<ob[i].eng<<" "<<ob[i].comp<<" "<<ob[i].totll<<" "<<ob[i].aver<<endl;
}
outfile.close();
}
//*************顯示所有學(xué)生數(shù)據(jù)*********************//
void student::read()
{
int i;
system("cls");
cout<<endl<<"----------------------------- 學(xué)生信息表 ------------------------------------"<<endl;
cout<<endl<<" 學(xué)號 姓名 性別 數(shù)學(xué) 英語 計算機 總分 平均分"<<endl;
for(i=0; i<this->stulen; i++)
{
ob[i].show();
}
getchar();
}
//*******************一個學(xué)生的數(shù)據(jù)****************//
void student::add()
{
int i, d=this->stulen ;
cout<<"輸入要添加學(xué)生的信息:"<<endl;
ob[d].setup();
cout<<endl<<"----------------------------- 學(xué)生信息表 ------------------------------------"<<endl;
cout<<endl<<" 學(xué)號 姓名 性別 數(shù)學(xué) 英語 計算機 總分 平均分"<<endl;
for(i=0; i<=d; i++)
{
ob[i].show();
}
ofstream fout("list.txt",ios::app);
if(!fout)
{
cout<<"Cannot open output file!\n,";
}
//把添加的學(xué)生數(shù)據(jù)添加到list.txt里邊去。
fout<<ob[d].id<<" "<<ob[d].name<<" "<<ob[d].sex<<" "<<
ob[d].math<<" "<<ob[d].eng<<" "<<ob[d].comp<<" "<<ob[d].totll<<" "<<ob[d].aver<<endl;
fout.close();
getchar();
}
//*********************刪除指定名字學(xué)生的數(shù)據(jù)*******************//
void student::del()
{
int i,p; char x[8];
cout<<" 輸入要刪除學(xué)生名字:"<<endl;
cin>>x;
//通過for循環(huán)查找要刪除學(xué)生的姓名
for(i=0; i<stulen; i++)
{
if(strcmp(ob[i].name,x)==0)
{
p=i;
cout<<endl<<"學(xué)號 姓名 性別 數(shù)學(xué) 英語 計算機 總成績 平均成績"<<endl;
cout<<ob[i].id<<" "<<ob[i].name<<" "<<ob[i].sex<<" "<<ob[i].math<<" "<<ob[i].eng<<" "<<ob[i].comp<<" "<<ob[i].totll<<" "<<ob[i].aver<<endl;
break;
}
else
continue;
}
cout<<endl<<"----------------------------- 學(xué)生信息表 ------------------------------------"<<endl;
cout<<endl<<" 學(xué)號 姓名 性別 數(shù)學(xué) 英語 計算機 總分 平均分"<<endl;
//刪除了之后,應(yīng)該把后面的數(shù)據(jù)往前移,把要刪除的數(shù)據(jù)覆蓋,并且學(xué)生長度減1
stulen--;
for(i;i<stulen;i++)
{
ob[i]=ob[i+1];
}
this->read ();
cout<<" 刪除成功!"<<endl;
getchar();
}
//***********把學(xué)生成績排序******************//
void student::order()
{
int k,j;
float t; char n[20];
//排序算法。
for(j = 0; j<=(2-1); j++)
{
for(k=1; k<=(2-j); k++)
{
if(ob[k].totll < ob[k + 1].totll)
{
t = ob[k].totll;
ob[k].totll = ob[k+1].totll;
ob[k+1].totll = t;
strcpy(n, ob[k].name);
strcpy(ob[k].name, ob[k+1].name);
strcpy(ob[k+1].name, n);
}
cout<<" 成績排名:"<<endl;
cout<<" 姓名 總成績 名次"<<endl;
for(k=0; k<=stulen; k++)
{
cout<<" ";
cout.setf(ios::left);
cout.width(9);
cout<<ob[k].name;
cout.width(9);
cout<<ob[k].totll<<k<<endl;
}
getchar();
}
}
}
//********************選擇菜單。*****************//
void menu()
{
cout<<"\n\n";
cout<<"------------------ 學(xué)生成績系統(tǒng) -----------------"<<endl<<endl;
cout<<"\t\t1.錄入與保存學(xué)生信息.\n";
cout<<"\t\t2.讀取學(xué)生信息.\n";
cout<<"\t\t3.刪除學(xué)生信息.\n";
cout<<"\t\t4.追加學(xué)生信息.\n";
cout<<"\t\t5.查詢學(xué)生信息.\n";
cout<<"\t\t6.顯示成績名次.\n";
cout<<"\t\t7.退出系統(tǒng)......\n\n\n";
cout<<"\t\t請選擇功能項: ";
}
//---------------------------------------------------------------------------------------
void main()
{
student a;
while(1)
{
int SEL;
system("cls");
menu();
cin>>SEL;
switch(SEL)
{
case 1:
system("cls"); a.input();a.save();break;
case 2:
system("cls"); a.read(); break;
case 3:
system("cls"); a.del(); break;
case 4:
system("cls"); a.add();break;
case 5:
system("cls"); a.Query();break;
case 6:
system("cls"); a.order();break;
case 7:
cout<<endl<<" 按任意鍵退出.... "<<endl;
getchar();
exit(0);
default:
cout<<"Bad input!!\n";
break;
}
}
} 我比較忙,沒有親自幫你寫,你自己改改吧,框架出來了。
已完成,請私信我。界面如下:
有醫(yī)院,有圖書,就是沒有教師的
給你畫個框架: