数据结构课程设计
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; }
相关文章推荐
- 数据结构和算法经典100题-第28题
- 数据结构课程设计之图书管理系统
- 数据结构实训:学生信息管理
- 数据结构实训-学生成绩管理系统
- 数据结构课程设计——学生成绩管理
- {数据结构课程设计}校园导游的多功能实现
- 数据结构课程设计——校园导航系统开发
- 数据结构 JAVA描述(四) 树与二叉树基础
- 数据结构和算法经典100题-第27题
- 【数据结构】双向链表的基本操作
- 数据结构课程设计-12月29日
- 数据结构--冒泡排序
- [Coursera]数据结构基础_Week4_字符串_Q3
- [Coursera]数据结构基础_Week4_字符串_Q2
- [Coursera]数据结构基础_Week4_字符串_Q1
- 数据结构(三)
- 第十六周--数据结构--项目一-- 插入排序之排序中输出每一趟的中间结果
- 第十六周--数据结构--项目一-- 插入排序之希尔排序
- 04 两个栈构造队列 & 两个队列构造栈
- 第十六周--数据结构--项目一--插入排序之折半插入排序