数据结构课程设计源代码

 
 
主程序main()
#include "ds.h"
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;


LinkList::LinkList()
{
	head=(LNode *)malloc(sizeof(LNode));
	head->next=NULL;
	length=0;
}
bool LinkList::IsCreate()
{
	if(length==0)
		return 0;
	return 1;
}
void LinkList::ListSize()
{
	if(!IsCreate())
	{
		cout<<"您还没有建表,请先建表!"<<endl;
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}
	else
	{
		cout<<"共存储了"<<length<<"个学生的数据信息."<<endl;
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}

}

void LinkList::CreatList()
{
	if(IsCreate())
	{
		cout<<"已经建立链表!"<<endl<<"请按任意键继续. . . "<<endl;
		getch();
	}
	else
	{
		int n;
		cout<<"              ******************利用头插法创建链表*****************"<<endl;
		cout<<"请输入要创建的单链表的节点数: ";
		cin>>n;
		LNode *p=head;length=n;
		for(int i=n;i>0;i--)
		{
			LNode *p=(LNode *)malloc(sizeof(LNode));
			cout<<"请输入学号: ";cin>>p->num;
			cout<<"请输入姓名: ";cin>>p->name;
			cout<<"请输入年龄: ";cin>>p->age;
			cout<<"请输入成绩: ";cin>>p->Score;
			cout<<"********************************************************************************"<<endl;
			p->next=head->next;
			head->next=p;
		}
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}
}
void LinkList::Find()
{
	if(!IsCreate())
	{
		cout<<"您还没有建表,请先建表!"<<endl;
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}
	else
	{
		char num[N];
		cout<<"请输入学号: ";
		cin>>num;
		LNode *p=head->next;
		while(p&&strcmp(p->num,num)!=0)
		{
			p=p->next;
		}
		if(!p)cout<<"无法查找到所要查找的学生信息!"<<endl;
		else{
			cout<<"姓名: "<<p->name<<endl;
			cout<<"年龄: "<<p->age<<endl;
			cout<<"成绩: "<<p->Score<<endl;
		}
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}
}
void LinkList::DeleteList()
{
	if(!IsCreate())
	{
		cout<<"您还没有建表,请先建表!"<<endl;
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}
	else
	{
		char num[N];
		cout<<"请输入所要删除的学生的学号: ";
		cin>>num;
		LNode *p=head;
		while(p->next&&strcmp(p->next->num,num)!=0)
		{
			p=p->next;
		}
		if(!(p->next))cout<<"找不到所要删除的内容,操作失败!";
		else 
		{
			length--;
			LNode *q=p->next;
			p->next=p->next->next;
			free(q);
		}
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}
}
void LinkList::Display()
{
	if(!IsCreate())
	{
		cout<<"您还没有建表,请先建表!"<<endl;
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}
	else
	{
		cout<<"所有学生的信息如下:"<<endl<<"********************************************************************************"<<endl;
		cout<<"共有"<<length<<"个学生的信息"<<endl;
		LNode *p=head->next;
		while(p)
		{
			cout<<"学号: "<<p->num<<endl;
			cout<<"姓名: "<<p->name<<endl;
			cout<<"年龄: "<<p->age<<endl;
			cout<<"成绩: "<<p->Score<<endl<<endl;
			p=p->next;
		}
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}
}
void LinkList::InsertList()
{
	if(!IsCreate())
	{
		cout<<"您还没有建表,请先建表!"<<endl;
		cout<<"请按任意键继续. . ."<<endl;
		getch();
	}
	else
	{
		int n,i=1;
		cout<<"请输入要插入的位置: ";cin>>n;
		if(n<1||n>length+1)cout<<"插入的位置不正确,操作失败!"<<endl;
		else
		{
			LNode *q,*p=head;
			q=(LNode *)malloc(sizeof(LNode));
			while(i<n)
			{
				p=p->next;
				i++;	
			}
			cout<<"请输入学号: ";cin>>q->num;
			cout<<"请输入姓名: ";cin>>q->name;
			cout<<"请输入年龄: ";cin>>q->age;
			cout<<"请输入成绩: ";cin>>q->Score;
			q->next=p->next;
			p->next=q;
			length++;
			cout<<"请按任意键继续. . ."<<endl;
			getch();
		}
	}
}



int main()
{
	LinkList L;int order,flag=1,confirm=1;char a[20];
	cout<<"        ********************欢迎进入学生信息管理系统*********************"<<endl;
	while(confirm)
	{
		while(flag)
		{
			cout<<"请输入命令:"<<endl;
			cout<<"1.创建链表  2.输出链表  3.插入数据  4.删除数据   5.查询数据   6.显示数据总数    7.退出系统"<<endl;
			cout<<"输入命令(数字标号):";
			cin>>order;
			switch(order)
			{
				case 1:	L.CreatList();break;
				case 2:	L.Display();;break;
				case 3:	L.InsertList();break;
				case 4:	L.DeleteList();;break;
				case 5:	L.Find();break;
				case 6:	L.ListSize();break;
				case 7:	flag=0;break;
			}
			cout<<endl;
		}
question:	cout<<"您确定要退出吗?(Y/N): ";
		cin>>a;
		if(!strcmp(a,"Y")||!strcmp(a,"y"))
		{
			cout<<"欢迎下次再使用本系统,谢谢!"<<endl;
			confirm=0;
		}
		else if(!strcmp(a,"N")||!strcmp(a,"n"))flag=1;
		else
		{
			cout<<"您输入的命令不正确,请重新输入!"<<endl;
			goto question;
		}
	}
	system("pause");
	return 0;
}

头文件

typedef struct LNode{	//数据节点定义
		char num[N];			//学号
		char name[N];			//姓名
		int age;				//年龄
		float Score;			//成绩
		LNode *next;
}LNode;

class LinkList			//链表类
{
private:
		LNode *head;		//将节点封装为私有变量
		int length;
public:
		LinkList();				//构造函数
		bool IsCreate();		//判断是否建立链表
		void ListSize();		//求链表长度
		void CreatList();		//建立链表
		void InsertList();		//插入
		void DeleteList();		//删除
		void Find();			//查找
		void Display();			//显示
		void BubbleSortList(); 	//链表的冒泡排序法
		void Count();			//统计成绩不及格的人数
}



你可能感兴趣的:(数据结构课程设计源代码)