?? zxc.txt
字號(hào):
#include <iomanip>
#include <iostream>
#include <fstream>
#include <vector>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <process.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
struct student
{
char name[10]; /// 姓名
char id[10]; /// 學(xué)號(hào)
float Ynum; /// 語文分?jǐn)?shù)
float Snum; /// 數(shù)學(xué)分?jǐn)?shù)
float Enum; /// 英語分?jǐn)?shù)
float number; /// 總分
student *next;
};
///////////-------定義類-----------------------////////////
class stud
{
student *p1,*p2,*head;
public:
~stud() /////----析構(gòu)函數(shù)------------------------
{
while(head)
{
p1=head->next;
delete head;
head=p1;
}
}
///------------成員函數(shù)------------
void output(student *head); // 輸出學(xué)生成績(jī)
student * input(student *head); // 增加學(xué)生記錄
student* del(student *head, char*p); // 刪除記錄
student* find(student *head,char *p,int &n); // 查找學(xué)生記錄(可查找多個(gè)同名數(shù)據(jù))
student* stat(student *head); //排序統(tǒng)計(jì)學(xué)生總分
friend void total(student*head); //統(tǒng)計(jì)學(xué)生總分
student* insert(student *head); //按學(xué)生總分插入記錄
student* clear(student *head); // 刪除當(dāng)前表
void Inputs(student *p); //用于添加數(shù)據(jù)的子函數(shù)
};//----------------------------------------------------
////---------用于添加數(shù)據(jù)的子函數(shù)-------///////
void stud::Inputs(student*p)
{
cout<<setw(6)<<"姓名"<<setw(8)<<" 學(xué)號(hào)"
<<setw(8)<<"語文"<<setw(8)<<"數(shù)學(xué)"
<<setw(8)<<"英語"<<endl;
cin>>p->name >>p->id;
cin >>p->Ynum;
while(cin.fail())
{ cerr<<"您的輸入有誤,請(qǐng)重新輸入"<<endl;
cin.clear ();
cin.sync ();
cin>>p->Ynum;
}
cin>>p->Snum;
while(cin.fail())
{ cerr<<"您的輸入有誤,請(qǐng)重新輸入"<<endl;
cin.sync ();
cin.clear ();
cin>>p->Snum;
}
cin>>p->Enum;
while(cin.fail())
{ cerr<<"您的輸入有誤,請(qǐng)重新輸入"<<endl;
cin.clear ();
cin.sync ();
cin>>p->Enum;
}
total(p); //計(jì)算出總分
}
////////-----輸出學(xué)生成績(jī)-----------------/////////////////////
void stud::output (student *head)
{ p1=head;
while(p1!=NULL)
{
cout<<setw(6)<<p1->name<<setw(8)
<<p1->id<<setw(8)<<p1->Ynum
<<setw(8)<<p1->Snum <<setw(8)
<<p1->Enum <<setw(7)<<p1->number <<endl;
p1=p1->next ;
}
}
/////////------------插入學(xué)生成績(jī)記錄--------////////////////
student* stud::insert(student *head)
{
p1=new student;
Inputs(p1); //調(diào)用子函數(shù) 增加數(shù)據(jù)
p2=head;
student* p3=NULL;
while((p2->number < p1->number ) && p2->next !=NULL)
{ p3=p2;
p2=p2->next;
}
if(p2->number > p1->number)
{ p1->next=p2;
if(p3==NULL) // 若當(dāng)前值是最小的
return p1;
p3->next =p1;
return head;
}
else
{ p2->next=p1;
p1->next=NULL;
return head;
}
}
//////----------清空數(shù)據(jù)------------/////////////
student* stud::clear(student*head)
{
while(head)
{ p1=head->next ;
delete head;
head=p1;
}
return head;
}
//////////-----------排序統(tǒng)計(jì)函數(shù)-----------/////////////////
student *stud::stat(student *head)
{
p2=head;
p1=p2->next;
while(p2->next) //冒泡泡法, 呵呵`~~~
{
if(p2->number > p1->number)
{ // 把頭指針指向當(dāng)前比較小的節(jié)點(diǎn)
p2->next=p1->next;
p1->next=head;
head=p1;
// 把用于比較的兩個(gè)指針復(fù)位
//p2=head;
p1=p2->next ;
}
else
{ // 指向下一個(gè)節(jié)點(diǎn)
p2=p2->next ;
p1=p2->next ;
}//-------------------------------------------
}
cout<<"當(dāng)前表以按學(xué)生總分排序成功"<<endl;
return head;
}
/////-----------刪除記錄-----------//////////////////////
student* stud::del (student *head,char *p)
{
p1=head;
p2=NULL;
while(strcmp(p1->name ,p)&& p1->next !=NULL)
{ p2=p1;
p1=p1->next ;
}
if(!strcmp(p1->name ,p))
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next ;
cout<<"刪除成功,OK"<<endl;
delete p1;
}
else
cout<<" 沒找到姓名"<<p<<"的學(xué)生.\n"; //結(jié)點(diǎn)沒找到
return head ;
}
///////----------統(tǒng)計(jì)總分---------------///////////////
void total(student *p)
{ p->number = p->Ynum + p->Snum + p->Enum;
}
///////-------------查找函數(shù)----------///////////////////
student* stud::find (student *head,char *p,int& n)
{
p2=head;
while(strcmp(p2->name ,p) !=0 && p2->next !=NULL)
p2=p2->next ;
if(0==strcmp(p2->name,p))
{
cout<<setw(6)<<p2->name<<setw(8)
<<p2->id<<setw(8)<<p2->Ynum
<<setw(8)<<p2->Snum <<setw(8)
<<p2->Enum <<setw(7)<<p2->number <<endl;
n++;
return p2;
}
else
if(n==0)
{
system("cls");
cout<<"對(duì)不起,沒有您要查找的學(xué)生數(shù)據(jù)"<<endl;
}
return NULL;
}
///////----------------增加學(xué)生記錄-----------////////////////////////////
student *stud::input (student *head)
{ p1=new student;
p2=head;
Inputs(p1); //調(diào)用子函數(shù) 增加數(shù)據(jù)
if(head ==NULL)
{
head=p1;
p1->next =NULL;
return head;
}
while(p2->next !=NULL)
p2=p2->next;
p2->next=p1;
p1->next=NULL;
return head;
}
//----------- 輸出錯(cuò)誤 -----------//////////
void error()
{
cout<<"錯(cuò)誤,這還是一張空表,請(qǐng)輸入數(shù)據(jù)"<<endl;
getch();
}
///////////////////------------main函數(shù)--------//////////////////-----------
int main(void)
{
stud stus;
student *head=NULL;
student *pd; //臨時(shí)指針, 用于查找函數(shù)
char choice; //用于存放用戶的選擇項(xiàng)
char name[10]; //查找,刪除記錄的 key
while(1)
{
system("cls"); cout<<setw(50)<<"石河子大學(xué)"<<endl;
cout<<setw(50)<<"信息科學(xué)與技術(shù)學(xué)院"<<endl;
cout<<setw(50)<<"信息管理與信息系統(tǒng)06級(jí)"<<endl;
cout<<setw(50)<<"徐兆臣(2006081874)"<<endl;
cout<<setw(57)<<"學(xué) 生 成 績(jī) 管 理 系 統(tǒng) "<<endl;
cout<<setw(50)<<"1.增加學(xué)生成績(jī)"<<endl;
cout<<setw(50)<<"2.顯示學(xué)生成績(jī)"<<endl;
cout<<setw(50)<<"3.排序統(tǒng)計(jì)成績(jī)"<<endl;
cout<<setw(50)<<"4.查找學(xué)生成績(jī)"<<endl;
cout<<setw(50)<<"5.刪除學(xué)生成績(jī)"<<endl;
cout<<setw(50)<<"6.插入學(xué)生成績(jī)"<<endl;
cout<<setw(50)<<"7.清空所有數(shù)據(jù)"<<endl;
cout<<setw(50)<<"8.安全退出系統(tǒng)"<<endl;
cout<<" 請(qǐng)輸入您的選擇(0--8):";cout<<endl;
int n=0; //計(jì)數(shù)器,用于在查找時(shí)計(jì)算有沒有同名學(xué)生
cin>>choice;
fflush(stdin);
if(choice=='8') //安全退出
{ cout<<"謝謝使用,再見"<<endl;
exit(0);
}//------------------------------------------------
switch(choice)
{
case '1':
head=stus.input (head);
break;//------------------------------------------------
case '2':
if(head==NULL)
{
error();
break;
}
cout<<setw(6)<<"姓名"<<setw(8)<<" 學(xué)號(hào)"
<<setw(8)<<"語文"<<setw(8)<<"數(shù)學(xué)"
<<setw(8)<<"英語"<<setw(13)<<"總分!!!"<<endl;
stus.output (head);
getch();
break;//------------------------------------------------
case '3':
if(head==NULL)
{
error();
break;
}
head=stus.stat(head);
getch();
break;//------------------------------------------------
case '4':
if(head ==NULL)
{
error(); //調(diào)用函數(shù)輸出錯(cuò)誤信息
break;
}
cout<<"請(qǐng)輸入想要查找的學(xué)生姓名"<<" ,"<<"本系統(tǒng)可以查找重復(fù)姓名學(xué)生"<<endl;
cin>>name;
pd=head;
cout<<setw(6)<<"姓名"<<setw(8)<<" 學(xué)號(hào)"
<<setw(8)<<"語文"<<setw(8)<<"數(shù)學(xué)"
<<setw(8)<<"英語"<<setw(13)<<"總分!!!"<<endl;
while(pd) // 循環(huán)調(diào)用函數(shù), 用于輸出多個(gè)的同名學(xué)生成績(jī)
{
pd=stus.find (pd,name,n);
if(pd==NULL)
break;
pd=pd->next ; //指針指向當(dāng)前以找到的下一個(gè)節(jié)點(diǎn),用于查找多個(gè)同名學(xué)生
}
getch();
break;//------------------------------------------------
case '5':
if(head==NULL)
{
error();
break;
}
cout<<"請(qǐng)輸入想要?jiǎng)h除學(xué)生姓名"<<endl;
cin>>name;
head=stus.del(head,name);
getch();
break;//------------------------------------------------
case '6':
if(head==NULL)
{
error();
break;
}
head=stus.stat (head);
head=stus.insert(head);
break;//-----------------------------------------------
case '7':
if(head==NULL)
{
error();
break;
}
head=stus.clear(head);
cout<<"刪除表成功~"<<endl;
getch();
break;//-----------------------------------------------
default :
cout<<" 對(duì)不起,您的輸入有誤,請(qǐng)重新輸入。\n";
getch();
break;
}//------------------------------------------------------
}
getch();
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -