C++實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng)
更新時(shí)間:2015年07月08日 09:32:13 投稿:hebedich
本文給大家分享的是使用C++實(shí)現(xiàn)的簡(jiǎn)單的學(xué)生管理系統(tǒng)的代碼,主要是通過鏈表來實(shí)現(xiàn),非常簡(jiǎn)潔,有需要的小伙伴可以參考下。
C++實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng)
//Student.cpp
#include<iostream>
using namespace std;
struct Stu
{
char no[10];
char name[16];
int math;
int chi;
double ave;
};
class Student
{
public:
Stu st;
Student * next;
public:
Student(){}
Student(Stu s)
{
st=s;
next=NULL;
st.ave=(st.math+st.chi)/2.0;
}
void setst(Stu s)
{
st=s;
st.ave=(st.math+st.chi)/2.0;
}
Stu getst()
{
return st;
}
void show()
{
cout<<"----------------------------"<<endl;
cout<<"學(xué)號(hào):"<<st.no<<endl;
cout<<"姓名:"<<st.name<<endl;
cout<<"數(shù)學(xué)成績(jī):"<<st.math<<endl;
cout<<"語文成績(jī):"<<st.chi<<endl;
cout<<"平均成績(jī):"<<st.ave<<endl;
cout<<"----------------------------"<<endl;
}
};
//main.cpp
#include<fstream>
#include"Student.cpp"
using namespace std;
Student * create_List();
void traverse_List(Student * pHead);
bool is_empty(Student * pHead);
int length_List(Student * pHead);
bool insert_List(Student * pHead,int position,Stu st);
bool delete_List(Student * pHead,int position,Stu * st);
void sort_List(Student * pHead);
void menu_select();
void handle_menu(int s);
void outFile();
Student * inFile();
void delFile();
Student * pHead;
void main()
{
menu_select();
}
void menu_select()
{
int s;
cout<<"請(qǐng)輸入您要操作的選項(xiàng):"<<endl;
cout<<"1.增加原始記錄"<<endl;
cout<<"2.按平均分排序顯示所有記錄"<<endl;
cout<<"3.保存原始文件"<<endl;
cout<<"4.讀取原始文件"<<endl;
cout<<"5.刪除原始文件"<<endl;
cout<<"6.插入單條記錄"<<endl;
cout<<"7.刪除單條記錄"<<endl;
cout<<"8.顯示記錄總條數(shù)"<<endl;
cout<<"9.結(jié)束程序運(yùn)行"<<endl<<endl;
cout<<"左邊數(shù)字對(duì)應(yīng)功能選擇,請(qǐng)選擇1-9:";
cin>>s;
handle_menu(s);
}
void handle_menu(int s)
{
switch (s)
{
case 1:
{
system("cls");
pHead=create_List();
system("cls");
menu_select();
break;
}
case 2:
{
if(NULL==pHead)
{
cout<<"記錄總條數(shù)為零"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
system("cls");
sort_List(pHead);
traverse_List(pHead);
getchar();
getchar();
system("cls");
menu_select();
break;
}
case 3:
{
if(pHead!=NULL)
{
system("cls");
outFile();
system("cls");
menu_select();
}
system("cls");
menu_select();
break;
}
case 4:
{
system("cls");
pHead=inFile();
system("cls");
menu_select();
break;
}
case 5:
{
system("cls");
delFile();
system("cls");
menu_select();
break;
}
case 6:
{
if(NULL==pHead)
{
cout<<"記錄總條數(shù)為零"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
system("cls");
int num;
Stu st;
traverse_List(pHead);
cout<<"您想在哪條記錄后插入,請(qǐng)輸入序號(hào):";
cin>>num;
cout<<"編輯要插入的記錄:"<<endl;
cout<<"學(xué)號(hào):";
cin>>st.no;
cout<<"姓名:";
cin>>st.name;
cout<<"數(shù)學(xué)成績(jī):";
cin>>st.math;
cout<<"語文成績(jī):";
cin>>st.chi;
if(insert_List(pHead,num-1,st))
{
cout<<"插入成功!"<<endl;
}
else
{
cout<<"插入失敗!"<<endl;
}
getchar();
getchar();
system("cls");
menu_select();
break;
}
case 7:
{
if(NULL==pHead)
{
cout<<"記錄總條數(shù)為零"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
int num;
Stu * st=(Stu *)malloc(sizeof(Stu));
traverse_List(pHead);
cout<<endl<<"請(qǐng)輸入您要?jiǎng)h除的記錄的序號(hào):";
cin>>num;
if(delete_List(pHead,num,st))
{
cout<<endl<<"成功刪除的記錄如下:"<<endl;
cout<<"學(xué)號(hào):"<<st->no<<endl<<"姓名:"<<st->name<<endl;
}
else
{
cout<<"刪除失敗!"<<endl;
}
getchar();
getchar();
system("cls");
menu_select();
break;
}
case 8:
{
if(NULL!=pHead)
{
system("cls");
cout<<"記錄總條數(shù):"<<length_List(pHead)<<"條"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
else
{
cout<<"記錄總條數(shù)為零"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
break;
}
case 9:
{
system("cls");
cout<<"成功退出!"<<endl;
exit(0);
break;
}
}
}
void delFile()
{
ofstream fileout;
fileout.open("c:\\kcsj.txt",ios_base::out);
fileout<<"";
fileout.close();
}
Student * inFile()
{
Student * pHead=(Student *)malloc(sizeof(Student));
if(NULL==pHead)
{
cout<<"分配失敗,程序終止!"<<endl;
exit(0);
}
Student * pTail=pHead;
pTail->next=NULL;
ifstream in("c:\\kcsj.txt");
if (!in.is_open())
{
cout << "Error opening file"<<endl;
exit(0);
}
while (!in.eof())
{
Stu st;
in.read(reinterpret_cast<char *>(&st), sizeof(st));
if (in.fail())
{
break;
}
Student * pNew=new Student();
if(NULL==pNew)
{
printf("分配失敗,程序終止\n");
exit(0);
}
pNew->setst(st);
pTail->next=pNew;
pNew->next=NULL;
pTail=pNew;
}
in.close();
return pHead;
}
void outFile()
{
ofstream out;
out.open("c:\\kcsj.txt",ios_base::out|ios_base::app|ios::binary);
if(!out)
{
cout<<"文件不存在,退出時(shí)別忘記保存文件!"<<endl;
out.close();
out.open("stu.dat",ios_base::out|ios::binary);
}
else
{
out.close();
out.open("c:\\kcsj.txt",ios_base::out|ios_base::app|ios::binary);
}
Student * temp=pHead->next;
while(temp!=NULL)
{
Stu st=temp->getst();
out.write(reinterpret_cast<char *>(&st), sizeof(st));
temp=temp->next;
}
out.close();
}
Student * create_List()
{
int len;
Student * pHead=(Student *)malloc(sizeof(Student));
if(NULL==pHead)
{
cout<<"分配失敗,程序終止!"<<endl;
exit(0);
}
Student * pTail=pHead;
pTail->next=NULL;
cout<<"請(qǐng)輸入要存儲(chǔ)的學(xué)生人數(shù):";
cin>>len;
for(int i=0;i<len;i++)
{
Stu st;
cout<<"請(qǐng)輸入第"<<i+1<<"個(gè)學(xué)生的學(xué)號(hào):";
cin>>st.no;
cout<<"請(qǐng)輸入第"<<i+1<<"個(gè)學(xué)生的姓名:";
cin>>st.name;
cout<<"請(qǐng)輸入第"<<i+1<<"個(gè)學(xué)生的數(shù)學(xué)成績(jī):";
cin>>st.math;
cout<<"請(qǐng)輸入第"<<i+1<<"個(gè)學(xué)生的語文成績(jī):";
cin>>st.chi;
Student * pNew=new Student();
if(NULL==pNew)
{
printf("分配失敗,程序終止\n");
exit(0);
}
pNew->setst(st);
pTail->next=pNew;
pNew->next=NULL;
pTail=pNew;
}
return pHead;
}
void traverse_List(Student * pHead)
{
int i=1;
Student * temp=pHead->next;
while(temp!=NULL)
{
cout<<endl<<"序號(hào):"<<i<<endl;
temp->show();
temp=temp->next;
i++;
}
}
bool is_empty(Student * pHead)
{
if(NULL==pHead->next)
{
return true;
}
else
{
return false;
}
}
int length_List(Student * pHead)
{
int len=0;
Student * temp=pHead->next;
while(temp)
{
len++;
temp=temp->next;
}
return len;
}
bool insert_List(Student * pHead,int position,Stu st)
{
int i=0;
Student * p=pHead;
while(NULL!=p&&i<position-1)
{
p=p->next;
i++;
}
if(i>position-i||NULL==p)
{
return false;
}
Student * pNew=(Student *)malloc(sizeof(Student));
if(NULL==pNew)
{
cout<<"分配失敗,程序終止"<<endl;
exit(0);
}
pNew->setst(st);
pNew->next=p->next;
p->next=pNew;
return true;
}
bool delete_List(Student * pHead,int position,Stu * st)
{
int i=0;
Student * p=pHead;
while(NULL!=p->next&&i<position-1)
{
p=p->next;
i++;
}
Student * q=p->next;
*st=q->getst();
p->next=p->next->next;
free(q);
q=NULL;
return true;
}
void sort_List(Student * pHead)
{
Student * p,* q;
Stu temp;
int i,j;
int len=length_List(pHead);
for(i=0,p=pHead->next;i<len-1;i++,p=p->next)
{
for(j=i+1,q=p->next;j<len;j++,q=q->next)
{
if(q->st.ave>p->st.ave)
{
temp=q->st;
q->st=p->st;
p->st=temp;
}
}
}
}
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
相關(guān)文章
C++輸入一個(gè)字符串,把其中的字符按照逆序輸出的兩種方法解析
以下是對(duì)C++中輸入一個(gè)字符串,把其中的字符按照逆序輸出的兩種方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-07-07
詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符
這篇文章主要介紹了詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
C語言實(shí)現(xiàn)歌曲信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)歌曲信息管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
C++ map的簡(jiǎn)單使用實(shí)現(xiàn)
map是STL的一個(gè)關(guān)聯(lián)容器,它以<key,value>一對(duì)一的形式存儲(chǔ),且map的內(nèi)部自建一個(gè)紅黑樹,使得其可以自動(dòng)排序,本文就介紹一下C++ map的簡(jiǎn)單使用,感興趣的可以了解一下2021-05-05
詳解C++中的內(nèi)存同步模式(memory order)
這篇文章主要介紹了C++中的內(nèi)存同步模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
C/C++常用函數(shù)易錯(cuò)點(diǎn)分析
這篇文章主要介紹了C/C++常用函數(shù)易錯(cuò)點(diǎn)分析,包含了memset、sizeof、getchar三個(gè)常用函數(shù)的分析,需要的朋友可以參考下2014-08-08

