数据结构课程设计

本文介绍了一个用于管理学生成绩的系统,包括添加、修改、储存、删除等操作,使用多文件输入和单链表数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
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;
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值