您的位置:首页 > 理论基础 > 数据结构算法

数据结构课程设计

2015-12-30 10:58 423 查看
/*
Copyright (c)2015,烟台大学计算机与控制工程学院
All rights reserved.
文件名称:数据结构课程设计
作    者:魏乐天
完成日期:2015年12月
版 本 号:v1.0

问题描述:  建立一个项目实现对学生成绩的管理。
实现对学生成绩的增添,修改,储存,删除等操作
采用多文件输入,单链表等。
1头文件:
<pre class="cpp" name="code">#include <iostream>
# include <fstream>
# include <string.h>
#include <conio.h>
using namespace std;
class Student
{
public:char name[20];
char Id[20];
int Cnum; //C课程
int Mnum; //数课程
int Enum; //英语课程
int sum; //总
Student * Next;
void Input()
{
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入号:";
cin>>Id;
cout<<"请输入C课程绩:";
cin>>Cnum;
cout<<"请输入数课程绩:";
cin>>Mnum;
cout<<"请输入英语课程绩:";
cin>>Enum;
sum=Cnum+Mnum+Enum;
}void ReadFile(istream & in)
{
cin>>name>>Id>>Cnum>>Mnum>>Enum>>sum;
}
void Show()
{
cout<<"姓名:"<<name<<endl<<"号:"<<Id<<endl<<"C++:"<<Cnum<<endl<<"数:"<<Mnum<<endl<<"外语:"<<Enum<<endl<<"总绩:"<<sum<<endl<<endl<<endl;
}
};


输入描述: 学生成绩。程序输出: 学生的成绩 */

 

2 主函数:

 

#include"header.h"
class Studentmassage
{
public:Studentmassage();
~Studentmassage();
void ShowMenu();
void Find();
void Save();
void ModifyItem();
void RemoveItem();
void Swap(Student *,Student *);
void Sort();
void Unpass();
int ListCount();
void Average();
void Display()
{
for(Student * p=Head->Next;p!=End;p=p->Next)p->Show();
cout<<"输入任意字符继续……";
getch();
}
void AddItem()
{
End->Input();End->Next=new Student;
End=End->Next;
cout<<"添加功!"<<endl;
cout<<"输入任意字符继续……";getch();
}
private:Student * Head,* End;
ifstream in;
ofstream out;
Student *FindItem(char * name)
{
for(Student * p=Head;p->Next!=End;p=p->Next)//匹配功则返指针功返空
if(!strcmp(p->Next->name,name))return p;
return NULL;
}Student *FindID(char * Id)
{
for(Student * p=Head;
p->Next!=End;
p=p->Next)//匹配功则返指针功返空
if(!strcmp(p->Next->Id,Id))return p;return NULL;
}
};
Studentmassage::Studentmassage()
{
Head=new Student;
Head->Next=new Student;
End=Head->Next;
in.open("sort.txt");
if(!in)cout<<"新系统信息请先输入"<<endl;
else
{
while(!in.eof())
{
End->ReadFile(in);
if(End->name[0]=='\0')break;
End->Next=new Student;
End=End->Next;
}in.close();
cout<<"\t\t读取信息功!"<<endl;
}
}
Studentmassage::~Studentmassage()
{
Save();
for(Student * temp;Head->Next!=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
delete temp;
}
delete Head,End;
}
void Studentmassage::ShowMenu()
{
cout<<"************ 学生成绩管理***********"<<endl;
cout<<"************************************"<<endl;
cout<<"************* 1.增加绩 *************"<<endl;
cout<<"************* 2.显示绩**************"<<endl;
cout<<"************* 3.排序统计绩 *********"<<endl;
cout<<"************* 4.查找绩 *************"<<endl;
cout<<"************* 5.删除绩 *************"<<endl;
cout<<"************* 6.修改信息************"<<endl;
cout<<"************* 0.安全退系统 *********"<<endl;
cout<<"\n\t\t\n\t\t请选择:";
}
void Studentmassage::Find()
{
char name[20] ,Id[10];
int x;
Student * p=NULL;
cout<<"\n\t\t*********************************\n";
cout<<"\t\t 1.按姓名查找\n\t\t 2.按号查找";
cout<<"\n\t\t*********************************\n请选择:";
cin>>x;
switch(x)
{
case 1:
{
cout<<"\t\t请输入要查找姓名:";
cin>>name;
if(p=FindItem(name))
{
p->Next->Show();
cout<<"输入任意字符继续……";
getch();
}
else
{
cout<<"\t\t没找该姓名"<<'\n'<<endl;
cout<<"输入任意字符继续……";
getch();
}
}break;
case 2:
{
cout<<"\t\t请输入要查找号:";
cin>>Id;
if(p=FindID(Id))
{
p->Next->Show();
cout<<"输入任意字符继续……";
getch();
}
else
{
cout<<"\t\t没找该"<<'\n'<<endl;
cout<<"输入任意字符继续……";
getch();
}
}
break;
}
}
void Studentmassage::ModifyItem()
{
char name[20];
Student * p=NULL;
cout<<"\t\t请输入要修改姓名:";
cin>>name;
if(p=FindItem(name))
{
cout<<"\t\t已找信息请输入新信息!"<<endl;
p->Next->Input();
cout<<"修改功"<<endl;
cout<<"输入任意字符继续……";
getch();
}
else
{
cout<<"\t\t没找!"<<endl;
cout<<"输入任意字符继续……";
getch();
}
}
void Studentmassage::RemoveItem()
{
char name[20];
Student * p=NULL,*temp=NULL;
cout<<"\t\t请输入要删除姓名:"<<endl;
cin>>name;
if(p=FindItem(name))
{
temp=p->Next;
p->Next=p->Next->Next;
delete temp;
cout<<"\t\t删除功!"<<endl;
cout<<"输入任意字符继续……";
getch();
}
else
{
cout<<"\t\t没找!"<<endl;
cout<<"输入任意字符继续……";
getch();
}
}
void Studentmassage::Swap(Student *p1, Student *p2)
{
Student *temp=new Student;
strcpy(temp->name,p1->name);
strcpy(temp->Id,p1->Id);
temp->Cnum=p1->Cnum;
temp->Mnum=p1->Mnum;
temp->Enum=p1->Enum;
temp->sum=p1->sum;
strcpy(p1->name,p2->name);
strcpy(p1->Id,p2->Id);
p1->Cnum=p2->Cnum;
p1->Mnum=p2->Mnum;
p1->Enum=p2->Enum;
p1->sum=p2->sum;
strcpy(p2->name,temp->name);
strcpy(p2->Id,temp->Id);
p2->Cnum=temp->Cnum;
p2->Mnum=temp->Mnum;
p2->Enum=temp->Enum;
p2->sum=temp->sum;
}
int Studentmassage::ListCount()
{
if(! Head)
return 0;
int n=0;
for(Student * p=Head->Next;p!=End;p=p->Next)
{n++;}
return n;
}
void Studentmassage::Sort()//前链表进行排序
{
cout <<"Sorting..."<<endl;
Student *p=NULL,*p1=NULL,*k=NULL;
int n=Studentmassage::ListCount();
if(n<2)
return;
for(p=Head->Next;p!=End;p=p->Next)
for(k=p->Next;k!=End;k=k->Next)
{
if(p->sum>k->sum)
{
Studentmassage::Swap(p,k);
}
}
cout <<"排序完"<<endl;
getch();
return;
}
void Studentmassage::Save()
{
out.open("sort.txt");
for(Student *p=Head->Next;p!=End;p=p->Next)
out<<p->name<<"\t"<<p->Id<<"\t"<<p->Cnum<<"\t"<<p->Mnum<<"\t"<<p->Enum<<"\t"<<p->sum<<'\n';
out.close();
}

int main()
{
int x,i=0;
bool quit=false;

Studentmassage Grade;
cout<<"按任意键始……";
getch();
while(!quit)
{
system("cls");
Grade.ShowMenu();
cin>>x;
switch(x)
{
case 0:
quit=true;
break;
case 1:
Grade.AddItem();
break;
case 2:
Grade.Display();
break;
case 3:
Grade.Sort();
break;
case 4:
Grade.Find();
break;
case 5:
Grade.RemoveItem();
break;
case 6:
Grade.ModifyItem();
break;
}
}
return 0;
}






 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: