大学体育信息管理系统

 

 

#include <iostream>
//这个头文件控制输出格式 setw() 
#include <iomanip>
//这个头文件负责文件的读取和存入 
#include <fstream>
//这个头文件负责字符串的比较 ,下面的strcmp() 函数在这个头文件里 
#include <cstring>
#include <cstdlib>
using namespace std;
struct CourseInfo
{
	char sub[20], section[20], address[20], tname[20];	//课目,节次,上课地点,任课老师
	int num;//上课人数 
	//这个结构体用来存放课程的基本属性 
};

struct Node
{
	CourseInfo course;
	struct Node* next;
	//这个结构体作为链表的结点 
};
//Management类实现系统功能 
class Management
{
public:
	Management();//构造函数 
	~Management();//析构函数 
	void Input();//录入信息
	void Search();//查找课程	
	void PrintMember();//显示所有课程信息 
	bool judge(char* ch1, char* ch2);//判断某老师在某节次有没有课 
	void Insert();//增加课程 
	void Delete();//删除课程 
	void getSec();//查看某节次的课程 
	void getTea(); //查看某老师的课程 
	void SaveFile();//保存 
private:
	Node *head; //头指针,不存储数据,标记链表的地址 
	Node *p;//遍历链表的作用,在每次遍历开始会给他头结点的地址,存放第一个课程信息 
	Node *q;
};
//构造函数 
Management::Management()
{
	head = new Node;
}
//析构函数,释放链表 
Management::~Management()
{
	p = head->next;
	while (p)
	{
		q = new Node;
		q = p;
		p = p->next;
		delete q;
	}
	head = NULL;
}

//从文件中读取信息,录入到程序中,存放在链表中 
void Management::Input()
{
	char file_name[50]; 	//存放要读取的文件名 
	cout << "请输入录入文件名:";
	cin >> file_name;		//输入要读取的文件名,如D://yj.txt 
	p = new Node;	//给结点指针分配空间,存放数据 
	p = head;  	 //此处特殊,若p = head->next会有问题,故存储头指针地址               

	CourseInfo val;  	 //定义一个存放课程信息的结构体 
	ifstream ifile(file_name, ios::in);//打开文件 
	if (!ifile.fail())	//如果打开成功,ifile.fail()返回false,故这里对它取反,当成功打开时进行录入 
	{
		cout << setw(10) << "课程" << setw(10) << "节次" << setw(15) << "上课地点" << setw(10) << "人数" << setw(10) << "任课老师" << endl;
		while (!ifile.eof())	//当文件未读取完 
		{

			ifile >> val.sub >> val.section >> val.address >> val.num >> val.tname;//将读取到的数据存到val.sub, val.section,val.address,val.num,val.tname中
			//将读取到的数据输出显示 
			cout << setw(10) << val.sub << setw(10) << val.section << setw(15) << val.address << setw(10) << val.num << setw(10) << val.tname << endl;

			p->next = new Node;	//为结点分配空间存储数据 
			p->next->course = val;	//将读取到的数据存到链表的最后一个结点中去 
			p = p->next;	//链表尾结点后移,准备存储下一条课程信息 

		}
		p->next = NULL;
		ifile.close();
	}
	else
	{
		cout << "打开失败" << endl;
	}
	return;

}

//判断某老师在某节次有没有课 
//ch1代表节次,ch2代表老师名字 
bool Management::judge(char* ch1, char* ch2)
{
	p = head->next;		//head为头指针,他的next结点为头结点,存放第一条课程信息 
	while (p)	//遍历链表,查看某老师是否在某节次有课 
	{
		//若查找到此老师在此节次有课,返回true 
		if (!strcmp(p->course.section, ch1) && !strcmp(p->course.tname, ch2))
		{
			return true;
		}
		p = p->next;
	}
	//若没有查找到,返回false 
	return false;
}
//显示所有课程信息 
void Management::PrintMember()
{
	cout << setw(10) << "课程" << setw(10) << "节次" << setw(15) << "上课地点" << setw(10) << "人数" << setw(10) << "任课老师" << endl;
	p = new Node;
	p = head->next;
	while (p)	//对链表进行循环,将每条课程信息都输出 
	{
		cout << setw(10) << p->course.sub << setw(10) << p->course.section << setw(15) << p->course.address << setw(10) << p->course.num << setw(10) << p->course.tname << endl;
		p = p->next;
	}
	return;
}
//增加课程信息 
void Management::Insert()
{
	CourseInfo val;
	cout << "请输入课程信息(课程名,节次,上课地点,人数,任课老师):" << endl;
	cout << "课程名:";
	cin >> val.sub;
	cout << "节次:";
	cin >> val.section;
	cout << "上课地点:";
	cin >> val.address;
	cout << "人数:";
	cin >> val.num;
	cout << "任课老师:";
	cin >> val.tname;
	//判断此老师在此节次是否有课,有课就不能增加	
	if (judge(val.section, val.tname))
	{
		cout << "老师在此节次已有课程" << endl;
		return;
	}
	p = head;
	while (p->next)
		p = p->next;	//将链表循环到链尾 
	q = new Node;
	q->course = val;
	p->next = q;	//在链尾接上新增课程结点 
	p->next->next = NULL;
	cout << "增加成功" << endl;
	return;
}
//删除课程 
void Management::Delete()
{
	char ch1[20], ch2[20];
	cout << "请输入要删除课程名:";
	cin >> ch1;
	cout << "请输入要删除课程节次:";
	cin >> ch2;
	p = head;	//为了能删除第一个课程信息,这里再最开始给p 头指针的地址 
	while (p->next)
	{
		if (!strcmp(p->next->course.sub, ch1) && (!strcmp(p->next->course.section, ch2)))
		{  //找到哪个p的下一个结点是要删除的课程 ,把p的下下个结点连在p后面 
			p->next = p->next->next;
			cout << "删除成功" << endl;
			return;
		}
		p = p->next;
	}
	cout << "未找到符合要求的课程" << endl;
	return;
}
//查找某课程的信息 
void Management::Search()
{
	cout << "请输入要查询课程名:";
	char ch[20];	//存放课程名 
	cin >> ch;
	bool tag = true;
	p = head->next;		// strcmp(p->course.sub,ch)的功能是比较p->course.sub和ch代表的字符串是否相同,相同返回 0
	while (p)
	{
		//为了达到在此课程没有课程信息时,能够不输出课程节次上课地点这个标题,用了下面的第一个if语句 
		if (tag&&!strcmp(p->course.sub, ch))//当此课程有课程信息时,就需要有下面的标题,且只需要输出一次 
		{
			cout << setw(10) << "课程" << setw(10) << "节次" << setw(15) << "上课地点" << setw(10) << "人数" << setw(10) << "任课老师" << endl;
			tag = false;
		}
		//因为此课程可能有很多个节次的课,所以把此课程的所有的课程信息都输出 
		if (!strcmp(p->course.sub, ch))
			cout << setw(10) << p->course.sub << setw(10) << p->course.section << setw(15) << p->course.address << setw(10) << p->course.num << setw(10) << p->course.tname << endl;
		p = p->next;	//将p后移一位,去判断下一个结点数据 
	}
	if (tag)
		cout << "未找到课程" << endl;
	return;
}
//查询某节次课程
//4.5.6三个功能用到的技术大致相同 
void Management::getSec()
{

	char ch[20];
	cout << "请问要查询哪个节次:";
	cin >> ch;
	bool tag = true;
	p = head->next;
	while (p)
	{
		if (tag&&!strcmp(p->course.section, ch))
		{
			cout << setw(10) << "课程" << setw(10) << "节次" << setw(15) << "上课地点" << setw(10) << "人数" << setw(10) << "任课老师" << endl;
			tag = false;
		}

		if (!strcmp(p->course.section, ch))
			cout << setw(10) << p->course.sub << setw(10) << p->course.section << setw(15) << p->course.address << setw(10) << p->course.num << setw(10) << p->course.tname << endl;
		p = p->next;
	}
	if (tag)
		cout << "此节次没课" << endl;
	return;
}
//查询某老师的课程 
void Management::getTea()
{
	char ch[20];
	cout << "请问要查询哪个老师:";
	cin >> ch;
	bool tag = true;
	p = head->next;
	while (p)
	{
		if (tag&&!strcmp(p->course.tname, ch))
		{
			cout << setw(10) << "课程" << setw(10) << "节次" << setw(15) << "上课地点" << setw(10) << "人数" << setw(10) << "任课老师" << endl;
			tag = false;
		}

		if (!strcmp(p->course.tname, ch))
			cout << setw(10) << p->course.sub << setw(10) << p->course.section << setw(15) << p->course.address << setw(10) << p->course.num << setw(10) << p->course.tname << endl;
		p = p->next;
	}
	if (tag)
		cout << "无此老师课程" << endl;
	return;
}
//保存文件
//将链表中的数据保存下来,方便下次使用 
void Management::SaveFile()
{
	char  file_name[50];
	cout << "请输入要保存的位置:";
	cin >> file_name; //如 D://love.txt 
	p = new Node;
	ofstream ofile(file_name, ios::out);
	if (!ofile.fail())
	{
		p = head->next;
		while (p)//遍历链表,将链表的数据逐个写入到文件中 
		{
			ofile << " " << p->course.sub << " " << p->course.section << " " << p->course.address << " " << p->course.num << " " << p->course.tname;
			if (p->next)//这里是为在每一条数据后换行 ,
				ofile << endl;//注意,最后一条数据后面不能加换行,光标最后要在最后一个数据后面,不能在下一行  
			p = p->next;
		}
		cout << "存储成功" << endl;
	}
	ofile.close();

}
int main()
{
	Management ma;	//创建一个Management类 
	int option;		// 系统功能菜单选项
	while (true)
	{
		//输出系统功能提示菜单
		cout << endl;
		cout << "       大学体育信息管理           " << endl;
		cout << "=============================" << endl;
		cout << "*    1. 录入信息            *" << endl;
		cout << "*    2. 删除课程信息        *" << endl;
		cout << "*    3. 增加课程信息        *" << endl;
		cout << "*    4. 查询课程信息        *" << endl;
		cout << "*    5. 查看节次课程        *" << endl;
		cout << "*    6. 查看老师课程        *" << endl;
		cout << "*    7. 显示全部课程信息    *" << endl;
		cout << "*    8. 保存                *" << endl;
		cout << "*    0. 退出系统            *" << endl;
		cout << "=============================" << endl;
		cout << "请选择 (1-9, 0: 退出): ";
		cin >> option;	// 输入功能菜单选项
		switch (option)
		{
		case 1:
			ma.Input();		//录入信息
			break;
		case 2:
			ma.Delete();	//删除课程信息
			break;
		case 3:
			ma.Insert();	//增加课程信息
			break;
		case 4:
			ma.Search();	//查询课程信息
			break;
		case 5:
			ma.getSec();	//查看节次课程
			break;
		case 6:
			ma.getTea();	//查看老师课程
			break;
		case 7:
			ma.PrintMember();	//显示全部课程信息
			break;
		case 8:
			ma.SaveFile();	//保存
			break;
		case 0:
			exit(0);
		default:
			cout << "输入选项不正确!请重新输入!" << endl;
		}
	}
}


This is the file for test

健美操 周一五六 体育馆一楼 32 老刘
拉丁舞 周一五六 体育馆二楼 32 老李
交谊舞 周二五六 体育馆二楼 26 老李
拉丁舞 周三七八 体育馆一楼 28 老刘
健美操 周一一二 体育馆一楼 32 老刘
拉丁舞 周四五六 体育馆二楼 32 老李
交谊舞 周二七八 体育馆二楼 26 老李
拉丁舞 周一三四 体育馆一楼 28 老刘
健美操 周三五六 体育馆一楼 32 老刘
拉丁舞 周三五六 体育馆二楼 32 老李
交谊舞 周五一二 体育馆二楼 26 老李
拉丁舞 周五七八 体育馆一楼 28 老刘

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java大学生竞赛管理系统是一种基于Java语言开发的竞赛管理软件,旨在提供一种高效、安全、便捷的竞赛管理方式。 该系统是针对大学生竞赛的独特需求而设计的。该系统可以管理各种类型的竞赛、比赛、活动,包括学术竞赛、体育竞赛、文艺比赛、志愿活动等。系统具有完善的报名和审核机制,全面的比赛信息统计功能,简便的成绩管理和发布功能等。 该系统的主要功能包括:竞赛管理、报名与审核、比赛信息统计、成绩管理、发布和查询等。其中,竞赛管理模块包括竞赛类型、比赛地点、比赛时间、竞赛规则等信息的设置;报名与审核模块包括学生报名、审核、报名费用的管理等。比赛信息统计模块可以对已经结束的比赛的相关数据进行统计分析,并以图表形式展示;成绩管理模块则提供成绩录入、公布、查询等功能,方便教师和学生及时了解比赛成绩。 此外,Java大学生竞赛管理系统还提供了一些安全控制措施,比如登录验证、用户权限控制等,以确保系统的完整、可用和安全性。用户可以通过不同的角色登录系统,比如管理员、教师、学生等。管理员可以对整个系统进行管理,包括用户管理、权限控制等。教师可以进行竞赛管理、成绩管理等操作,而学生则可以进行报名、查询等操作。 综上所述,Java大学生竞赛管理系统是一款独特、高效、易用的竞赛管理软件,可以大大提高大学生竞赛管理的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值