C++实习任务之学生活动管理系统

1、学生活动管理系统:管理员能够登录该系统,可以设计学生活动基本信息,对学生活动信息能够进行录入、浏览、修改、删除、查找、退出系统等的操作,系统以菜单方式进行工作。学生活动信息应包括:活动时间、活动内容、活动场地等信息。学生可以登录该系统,显示的界面不同,学生可以进行浏览活动信息、报名参加活动、退出系统的操作。

 

2、程序编写可以两个文件,myList.h作为头文件,在这个头文件使用链表,指针实现数据元素的存储(按一定顺序存储),并编写一些函数,实现菜单里的功能;源.cpp进行调用myList.h里的函数,实现功能。

长久保存数据需要在编写程序时,进行文件的写入与读取。

3、代码实现。

myList.h 头文件

#include<iostream>
#include<string>
#include<fstream>

using namespace std;
struct activity
//创建一个结构体,加入活动名字,时间,地点。内容。
{
	char name[20];
	char time[20];
	char place[20];
	char detail[20];
};

//结构分结构去写
struct Node 
{
	
	struct activity data;
	struct Node* next;
};
//创建一个链表
struct Node* creatList() 
{
	//用一个结构体变量表示表头
	//指针变成结构体变量,用动态内存申请,让指针能够表示变量
	struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));

	headNode->next = NULL;//表头做差异化处理,对指针域进行初始化

	return headNode;
}
//创建结点
struct Node* createNode(struct activity data) 
{
	struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
	//newNode表示新的结点
	newNode->data = data;

	newNode->next = NULL;
	return newNode;
}
//插入结点
void insertNodeByHead(struct Node* headNode, struct activity data) 

{
	struct Node* newNode = createNode(data);//创建的结点加入到creatNode()中
	//头插法,每一个新结点的next始终指向头节点的next;头节点的next始终指向新结点。
	newNode->next = headNode->next;

	headNode->next = newNode;
}
//指定位置删除活动;
void deleteAppoinNode(struct Node* headNode, char* name) 
{
	struct Node* posNode = headNode->next;

	//posNode 表示为 指定结点,
	//posFrontNode 表示为 指定删除节点的前面结点;

	struct Node* posFrontNode = headNode;

	if (posNode == NULL) 
	{
		cout << "没有该项活动!\n";
		return;
	}
	while (strcmp(posNode->data.name,name)) 
	{
		posFrontNode = posNode;
		posNode = posFrontNode->next;
		if (posNode == NULL) 
		{
			cout << "未找到该活动!\n";
			return;
		}

	}
	posFrontNode->next = posNode->next;
	free(posNode);//释放指定位置的结点。
}
//查找活动信息;
struct Node* searchInfoByData(struct Node* headNode, char* name) {
	//只能以数据进行查找用   利用活动名称查找。
	 
	struct Node* posNode = headNode->next;

	//posNode 表示为 指定结点,
	//posFrontNode 表示为 指定删除节点的前面结点;

	struct Node* posFrontNode = headNode;

	if (posNode == NULL)
	{
		cout << "没有该项活动!\n";
		return NULL;
	}
	while (strcmp(posNode->data.name, name))
	{
		posFrontNode = posNode;
		posNode = posFrontNode->next;
		if (posNode == NULL)
		{
			cout << "未找到该活动!\n";
			return 0;
		}

	}
	//return pmove;
	return posNode;
}
//打印链表(浏览活动信息);
void printList(struct Node* headNode)//打印的是用headNode做表头的表示的链表
{
	ofstream fout;

	fout.open("test.txt");
	
	//第一个结点没有做初始化数据,从第二个结点开始
	struct Node* pmove = headNode->next;

	cout << " 活动名字\t 时间\t 地点\t 内容\n";
	while (pmove)
	{
		cout << pmove->data.name << "\t"<< pmove->data.time <<"\t"<<pmove->data.place<<"\t"<<pmove->data.detail<< endl;
		fout<< "活动名字:   \t 时间:   \t 地点:   \t 内容:   ";
		fout << pmove->data.name << "\t" << pmove->data.time << "\t" <<pmove-> data.place << "\t" <<pmove-> data.detail << endl;
		//将活动的信息写入文件中
		pmove = pmove->next;
	}
	cout << "\n";
	fout.close();
}

源文件

#include<iostream>
#include"myList.h"
#include<fstream>
#include<string>



using namespace std;
struct Node* list = creatList();
void menu()//管理员菜单设计
{
	cout << "------------【活动管理】---------------\n";
	cout << "\t\t0、退出系统\n";
	cout << "\t\t1、活动信息录入\n";
	cout << "\t\t2、增加活动信息\n";
	cout << "\t\t3、浏览活动内容\n";
	cout << "\t\t4、修改活动信息\n";
	cout << "\t\t5、删除活动信息\n";
	cout << "\t\t6、查找活动信息\n";
	cout << "------------------------------------------\n";
}
void menu1()//学生菜单设计
{
	cout << "------------【活动管理】---------------\n";
	cout << "\t\t0退出系统\n";
	cout << "\t\t1浏览活动内容\n";
	cout << "\t\t2报名参加活动\n";
}
void activities()
{
	cout << "登录成功!\n";
	
	string actname;
	string b;
	ifstream fin;
	
	int choice = 0;
	int s;
	cin >> choice;
	switch (choice) {
	case 0:
		cout << "正常退出系统!\n";
		exit(0);
		break;
	case 1:
		fin.open("test.txt", ios::in);
		cout << "***********浏览活动的信息**********\n";
		while (getline(fin, b)) {
			cout << b << endl;
		}
		
		fin.close();
		break;
	case 2:
		cout << "***********报名参加活动*************\n";
		cout << "想报名参加活动的名称\n";
		cin >> actname;
		cout << "do you want to participat the activity? (yes=1||no=0)\n";
		cin >> s;
		if (s == 1)
		{
			cout << "报名" << actname << "成功,请按时参加活动\n";


		}
		else {
			cout << "不报名参加活动\n";
		}
		break;
	default:
		cout << "输入错误,请重新选择!\n";
		break;
	}
}

void keyDown()//根据所选的菜单选项,做相应的事。
{
	cout << "登陆成功!\n";
	struct Node* pmove = NULL;//动态指针pmove 初始化
	
	
	int choice = 0;
	struct activity data;
	cin >> choice;
	//fout.open("test.txt",'w');
	switch(choice)
	{
	case 0:
		cout << "正常退出!\n";


		exit(0);
		
		break;
	case 1:
		//fout.open("test.txt",'w');
		cout << "***********录入活动信息**********\n";
		//即插入链表
		cout << "请输入活动的名称,时间,地点,内容。\n";
		fflush(stdin);//清空处理
		cin >> data.name;
		cin >> data.time;
		cin >> data.place;
		cin >> data.detail;
		
		//调用myList.h里面的插入函数;
		insertNodeByHead(list, data);
		
	 break;
	case 2:
		//fout.open("test.txt");
		cout << "***********增加活动信息****\n";
		//即插入链表
		cout << "请输入活动的名称,时间,地点,内容。\n";
		fflush(stdin);//清空处理
		cin >> data.name;
		cin >> data.time;
		cin >> data.place;
		cin >> data.detail;
	
		insertNodeByHead(list, data);
		
		break;
	case 3:
		cout << "***********浏览活动信息**********\n";

        //打印链表

		printList(list);
		
		
		break;
	case 4:
	
		cout << "***********修改活动信息**********\n";
		cout << "输入你要修改的信息\n";
		
		cin >> data.name;

		deleteAppoinNode(list, data.name);

		
		
		cout << "请输入你要修改的信息:\n";
		cin >> data.name;
		cin >> data.time;
		cin >> data.place;
		cin >> data.detail;
		
		insertNodeByHead(list, data);
		
		break;
	case 5:

		cout << "***********删除活动信息**********\n";

		cout << "输入你要删除的活动名称\n";

		cin >> data.name;
		deleteAppoinNode(list,data.name);

		break;
	case 6:
		cout << "***********查找活动信息**********\n";
		cout << "输入要查找的活动名称:\n";
		cin >> data.name;

		pmove = searchInfoByData(list, data.name);
		//pmove初始化
		if (pmove == NULL)
		{
			//cout << "未找到该活动!\n";
			system("pause");

		}
		else {
			cout << "活动名字:    \t时间:     \t地点:     \t内容:     \n";
			cout << pmove->data.name <<"\t"<<pmove->data.time<<"\t"<<pmove->data.place<<"\t"<<pmove->data.detail<< endl;
			
		}
		break;
	default:
		cout << "输入错误!请重新输入\n";
		break;
	}
	
}

int main()
{
	char a[20] = "score.txt";
	struct activity data;
	
	int adnum=2233,stnum=1122,zhanghao;
	int password1 = 123, password2 = 456,password;
	cout << "请输入账号、密码。\n";
	cin >> zhanghao;
	cin >> password;
	
	switch(zhanghao)
	{
		case 2233:
			if (password == 123)
			{
				
				cout << "管理员身份登陆成功\n";
				while (1)
				{
					menu();
					keyDown();
					system("pause");
					system("cls");
				}
			}
			else {
				cout << "登录失败!\n";
			}
			break;
	case 1122:
		if (password == 456)
		{
			cout << "学生身份登录成功!\n";
			while (1) 
			{
				menu1();
				activities();
				system("pause");
				system("cls");
			}

		}
		else {
			cout << "登录失败!\n";
		}
		break;
	default:
		cout << "登陆失败!\n";
		break;
	}
	
	return 0;
}

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值