数据结构课程设计 ——考试报名系统

这篇具有很好参考价值的文章主要介绍了数据结构课程设计 ——考试报名系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构课程设计 ——考试报名系统

一、项目功能要求
完成对考生信息的建立,查找,插入,修改,删除等功能。其中考生信息包括准考证号,姓名,性别,年龄和报考类别等信息。项目在设计时应首先确定系统的数据结构,定义类的成员变量和成员函数;然后实现各成员函数以完成对数据操作的相应功能;最后完成主函数以验证各个成员函数的功能并得到运行结果。
二、项目思路
1.建立考生的信息系统,输入考生的信息,保存在链表中
2.在电脑端给出操作的提示,比如要进行的插入删除修改和统计的操作
3.进行插入的操作:指的是依次插入学生的所有信息
4.进行删除的操作,首先,先找删除的位置,若这个位置存在,即在链表数据范围内,那么进行删除,若位置不存在,那么进行合理的提示并重新输入
5.进行查找的操作:查找方式是通过学号进行查找,如果输入错误或者学号不存在,进行提示并且重新输入,若学号存在,那么打印这个考生的所有信息。
6.进行修改的操作:和上面的一样,通过学号先找这个考生是否存在,如果输入错误或者学号不存在,进行提示并且重新输入,如果学生存在,那么提示进行输入新的学生信息的操作,重新输入信息。
7.进行统计的操作:做完了修改的操作想要验证一下修改后所有考生的信息,就是对现在所有的考生的信息进行一个输出。
8.取消操作:输入0,所有操作结束,退出系统。

三、项目代码

#include<iostream>
#include<string>
#include<windows.h>
using namespace std;

template<class T1,class T2>//类模板,只有两种类型的string和int类型,设置一个模板
class Student {
public:
	void inputStudent(Student* head);      //输入学生的信息 
	void outputStudent(Student * head);    //输出学生的信息 
	void deleteStudent(Student * head);    //删除学生的信息
    void addStudent(Student * head);       //添加学生的信息
	void changeStudent(Student * head);   //修改学生的信息 
	void findStudent(Student * head);    //查找学生的信息 
	void getcountStudent(Student* head);
private:
	T2 m_id;       //考号
	T1 m_name;  //姓名
	T1 m_sex;   //性别
	T2 m_age;      //年龄
	T1 m_type;  //报考类型
	Student<T1,T2>* next;  //下一个节点的地址
	
};
int location;//设置一个全局变量,是学生的位置信息

//输入学生信息的函数
template<class T1, class T2>
void Student<T1,T2>::inputStudent(Student<T1,T2>* head) 
{
	Student* p1, * p2;
	p1 = head;
	tt:cout << "首先请建立考生信息系统!" << endl;
	cout << "请输入考生人数:";
	int n;
	cin >> n;
	if (n <= 0 || cin.fail())  // 输入错误的判定
	{
		cout << "输入错误,请重新输入"<<endl;// 输入错误的提示
		if (cin.fail()) //如果输入的不是整数类型那么进行一个判断并且进行清空
		{
			cin.clear();
			cin.ignore();
		}
		Sleep(1000);
		system("cls");
		goto tt;
	}
	cout << "请依次输入考生的考号,姓名,性别,年龄及报考类别!\n" ;
	for (int i = 0; i < n; i++)
	{

		p2 = new Student; //建立一个新得节点
		p1->next = p2;    //头结点是空的
		p1 = p1->next;
		cin >> p1->m_id >> p1->m_name >> p1->m_sex >> p1->m_age >> p1->m_type;  //依次进行输入的操作

	}
	p1->next = NULL;  //最后的节点地址部分设为空
	
}
//输出考生信息的函数
template<class T1, class T2>
void Student<T1,T2>::outputStudent(Student<T1,T2>* head) {
	Student* p1, * p2;
	p1=head->next;
	int r = 0;
	cout << "考号\t姓名\t性别\t年龄\t报考类型" << endl;
	while (p1!= NULL)
	{
		cout << p1->m_id<<"\t" << p1->m_name << "\t" << p1->m_sex << "\t" << p1->m_age << "\t" << p1->m_type << endl;
		r++;
		p1 = p1->next;
	}
}
int amount= 0;    //全局变量计算考生的个数
template<class T1, class T2>
void Student<T1,T2>::getcountStudent(Student<T1,T2>* head) {
	Student* p1;
	p1 = head->next;
	while (p1 != NULL)
	{
		amount++; //每次进行一个自加,之所以用全局变脸是因为好输出,方便
		p1 = p1->next;
	}
}
template<class T1, class T2>
void Student<T1,T2>::addStudent(Student* head)  //添加考生的函数
{
	Student* p1, * p2; //设置两个指针节点,在这两个节点中间的位置加入元素
	Student* p3;
	cout << "请输入你要插入的考生的位置:";
	
	cin >> location;
	if (location > 0)   //对考生的位置输入进行输入正误的判定
	{
		if (location > 0 && location <= amount )
		{
			p1 = head;
			p2 = p1->next;
			while (--location) //每次进行一个位置的自减
			{
				p2 = p2->next;    //两个指针分别向后移动
				p1 = p1->next;
			}
			p3 = new Student;  //new一个新的节点
			cout << "请依次输入考生的考号,姓名,性别,年龄及报考类别!\n";
			cin >> p3->m_id >> p3->m_name >> p3->m_sex >> p3->m_age >> p3->m_type;//输入信息
			p3->next = p2;  //进行一个链接
			p1->next = p3;
		}
		else  //进行一个输入错误的判断
		{
			location = -1;
			cout << "输入错误,请输入1到" << amount << "之间的数" << endl;
		}

	}
	else
	{
		location = -1;
		mm:cout << "输入错误,请输入1到" << amount << "之间的数" << endl;
		if (cin.fail()) //这里如果输入的不是整型,比如输入的是字母就进行一个
		{
			cin.clear();
			cin.ignore();
		}
		
	}
}
template<class T1, class T2>
void Student<T1,T2>::deleteStudent(Student<T1,T2>* head) //删除考生信息的函数
{
	Student* p1, * p2;   //删除的是p2指针
	cout << "请输入你要删除考生的考号:";
	p1 = head;
	p2 = head->next;
	cin >> location;
	int i = amount;
	if (location > 0)  //输入考号
	{
		while (i) 
		{
			if (p2->m_id==location)
			{
				cout<<"你删除的考生信息是:"<< p2->m_id << "\t" << p2->m_name << "\t" << p2->m_sex << "\t" << p2->m_age << "\t" << p2->m_type << endl;
				p1->next = p2->next;
				delete p2;
				break;
			}
			p1 = p2;
			p2 = p2->next;
			i--;
			if (i==0)//这里有bug
			{
				cout << "您删除的考生不存在"<<endl;
				location = -1;
			}
			
		}
	}
	else
	{
		location = -1;
		cout << "输入错误,请输入1到" << amount<< "之间的数" << endl;
		if (cin.fail()) //这里如果输入的不是整型,比如输入的是字母就进行一个
		{
			cin.clear();
			cin.ignore();
		}
	}
}
template<class T1, class T2>
void Student<T1,T2>::findStudent(Student* head)  //查找考生的信息
{
	Student* p1;
	cout << "请输入您要查找考生的考号:";
	cin >> location;
	p1 = head->next;
	//由于输入不同的错误进行相应的判定
	if (location < 0) //小于0的判定
	{
		location = -1;
		cout << "输入错误,请重新输入" << endl;
		
		
	}
	else if (cin.fail()) //输入的类型不同进行的判定
	{
		location = -1;
		cout << "输入错误,请重新输入" << endl;
		cin.clear();
		cin.ignore();
		
	}
	else 
	{
		while (p1 != NULL)
		{
			if (p1->m_id == location) //如果考号相等则输出查找学生的信息
			{
				cout << "考号\t姓名\t性别\t年龄\t报考类型" << endl;
				cout << p1->m_id << "\t" << p1->m_name << "\t" << p1->m_sex << "\t" << p1->m_age << "\t" << p1->m_type << endl;
				break;
			}
			p1 = p1->next;
			if (p1 == NULL)
			{
				location = -1;
				cout << "您查找的考生不存在"<<endl;
			}
		}
	}
	
	
	
}
template<class T1, class T2>
void Student<T1,T2>::changeStudent(Student* head) //修改学生信息的函数
{
	Student* p1;   //只修改一个信息,所以设一个指针变量就行了
	cout << "请输入要修改的考生的考号:";
	cin >> location;
	p1 = head->next;
	//由于输入不同的错误进行相应的判定
	if (location < 0) //小于0的判定
	{
		location = -1;
		cout << "输入错误,请重新输入" << endl;
		return;
	}
	if (cin.fail()) //输入的类型不同进行的判定
	{
		location = -1;
		cout << "输入错误,请重新输入" << endl;
		cin.clear();
		cin.ignore();
		return;
	}
	//如果输入正确,则进行以下的操作,
	while (p1 != NULL) //先判断是不是一个空的链表
	{
		if (p1->m_id == location)
		{
			cout << "请输入您要修改的信息" << endl;
			cin >> p1->m_id >> p1->m_name >> p1->m_sex >> p1->m_age >> p1->m_type;//输出
			break;
		}
		p1 = p1->next; //指针向下一个移动
		if (p1 == NULL)
		{
			location = -1;
			cout << "您查找的考生不存在,请重新输入学号";
		}
	}
}
/*
1 stu1 男 21 游戏设计师
2 stu2 女 21 数据架构师
3 stu1 男 20 软件开发师
4 stu2 女 21 软件测试员
5 stu3 男 22 网络工程师
*/
int main() {
	Student<string,int> h; //模板类变量的建立
	Student<string,int>* head = new Student<string,int>; //设立一个头结点,并且在此项目中,头结点都是空的
	h.inputStudent(head);
	h.outputStudent(head);
	h.getcountStudent(head);
	while (true)
	{
		tt:cout << "请选择您要进行的操作(1为插入,2为删除,3为查找,4为修改,5为统计,0为取消操作)";
		int n;
		cin >> n;
		switch (n)
		{
			case 1:
				h.addStudent(head);
				while (location == -1)
				{
					h.addStudent(head);
				}
				h.outputStudent(head);
				h.getcountStudent(head);
				break;
			case 2:
				h.deleteStudent(head);
				while (location == -1)
				{
					h.deleteStudent(head);

				}
				h.outputStudent(head);
				h.getcountStudent(head);
				break;
			case 3:
				h.findStudent(head);
				while (location == -1)
					h.findStudent(head);
				break;
			case 4:
				h.changeStudent(head);
				while (location == -1)
					h.changeStudent(head);
				break;
			case 5:
				h.outputStudent(head);
				break;
			case 0:
				break;
			default:
				cout << "输入错误,请重新输入" << endl;
				Sleep(1000);
				goto tt;

		}
		if (n == 0)
			break;
	}
	system("pause");
	return 0;
	

}

四、项目演示结果
功能1:输入考生人数,出现输入提示,并且依次输入这几个考生的考号姓名性别和报考类别,下面是依次输出,然后出现进行五项操作的提示,以下进行依次操作
数据结构考试报名系统,数据结构,链表,c++
功能2:在上面的操作中进行第一个选项进行插入,选择插入的位置并插入数据,最后就是打印新的列表数据
数据结构考试报名系统,数据结构,链表,c++

功能3:发现刚刚插入的学生数据需要删除,于是寻找删除的位置,并且把删除后的链表打印出来
数据结构考试报名系统,数据结构,链表,c++
功能4:进行学生查找的操作
数据结构考试报名系统,数据结构,链表,c++

功能5:修改操作
数据结构考试报名系统,数据结构,链表,c++
功能6:统计当前的报名系统上学生的信息
数据结构考试报名系统,数据结构,链表,c++
进行完刚刚的修改操作后,若要打印所有考生的数据和刚刚进行修改的操作结果,则可以进行统计的操作来看自己的修改结果。
数据结构考试报名系统,数据结构,链表,c++

五、健壮性修复
进行代码的健壮性修复,如果输入有误,则提示有误,并且提示重新输入。文章来源地址https://www.toymoban.com/news/detail-764451.html

到了这里,关于数据结构课程设计 ——考试报名系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【用C语言描述数据结构】课程设计:歌手比赛系统

    ✅作者简介:一名在读大二学生,希望大家多多支持👍👍👍 🔥系列专栏:数据结构 💬个人主页:梦园的CSDN博客 文末附有全部代码哦 💖💖 文末附有全部代码哦~ 设计一个简单的歌手比赛绩管理程序,对一次歌手比赛的成绩进行管理,使用 链表 实现,基本的设计要求如

    2024年02月03日
    浏览(34)
  • 数据结构课程设计——哈夫曼编/译码系统设计与实现(C++)

    对于生产实际的问题,本设计可以作为一个无损数据压缩工具,在需要传输海量数据时,利用哈夫曼编码可以将数据进行压缩,从而减小传输的数据量,提高数据传输效率。同时,哈夫曼编码也可以应用于数据加密和解密等领域。 本设计的主要目的是学习哈夫曼编码算法,并

    2024年02月04日
    浏览(31)
  • 数据结构课程设计——电话号码查询系统(C语言)

    1、通过文件导入和手动输入两种方式录入个人的基本信息(姓名、电话、QQ、微信) 2、可通过输入姓名或者电话号码来查询录入的人的基本信息 3、也可通过该系统修改和删除信息 1、菜单界面  2、读取文件(这里需要先创建一个txt文件)  3、手动添加信息  4、查询个人信

    2024年02月11日
    浏览(42)
  • 数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)

    写在前面:欢迎来到「湫歌」的博客。我是秋秋,一名普通的在校大学生。在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们一起成长一起进步。也希望大家多多支持我鸭,喜欢我

    2024年02月10日
    浏览(71)
  • 数据结构课程设计之火车票订票系统实现(C语言/C++版本)

    课题描述 编制一个程序,火车票订票的业务活动包括:车次查询、订票、退票、用户管理等。 需求分析 用户信息包括用户姓名、身份证号、用户电话、用户所购列车号、订单号;列车信息包括:列车车站号、车票起点、车票终点、出发时间、到达时间、票价、票数等基本信

    2024年01月19日
    浏览(37)
  • 燕山大学数据结构与算法课程实践——ISBN号识别系统的设计与开发

            ISBN 号是国际标准书号的简称,它是国际标准化组织于 1972 年公布的一项国际通用的出版物统一编号方法。所有正规出版的普通图书版权页都有 ISBN 号, ISBN 是 international standard of book number 几个英文字母的缩写,即国际标准书号。这个号码印刷在每本图书封底( 或

    2024年03月15日
    浏览(53)
  • 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)

    一、设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程。 通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的运

    2024年02月09日
    浏览(40)
  • C语言版数据结构-课程设计-航空客运订票系统 V2.0 附源码(增加管理员功能)

    相信很多粉丝看过看过我的主页,有一个航空订票系统: 数据结构航空订票系统(附源码) 但是最近后台收到很多粉丝的要求,在上一个航空订票系统中要加上管理员的功能块,于是对上面那个课设进行了改进,新的功能流程如下: (航班信息由管理员添加和删除、顾客可

    2024年02月03日
    浏览(35)
  • 数据结构课程设计

    编制一个能演示执行集合的交、并和差运算的程序。 要求: 集合元素用小写英文字母,执行各种操作应以对话方式执行。 算法要点:利用单链表表示集合;理解好三种运算的含义 分析 : 输入:输入应该具有判断是否为小写字母的功能,如果不是小写字母,应该舍去,同时

    2024年02月02日
    浏览(35)
  • 学生网上考试报名系统的设计与实现

    技术栈 : MySQL、Maven、SpringBoot、Spring、SpringMVC、MyBatis、HikariCP、fastjson、slf4j 系统功能 : 用户角色 : (1)登录:用户在登录界面输入正确的账户名和密码,点击登录,系统将与数据库存储的用户数据进行匹配,匹配成功就可以成功登录,若匹配失败,则登录失败。 (2)注

    2024年02月06日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包