C++ 会议信息管理系统 程序设计报告

@C++ 会议信息管理系统

C++ 会议信息管理系统 程序设计报告

会议记录管理系统

问题描述:

定义会议信息类class Conference

会议信息包括:会议编号,会议名称、部门名称、会议地点,会议日期,会议主会议记录人,出席人员,会议摘要。会议信息以二进制形式存储在文件中。

(1)添加会议记录

(2)浏览所有会议记录信息

(3)按不同字段( 会议编号,会议名称等)查询会议记录(4)修改会议记录

(5)删除会议记录

实验概述

会议信息管理系统的系统:
在日常工作生活中,开会是大家经常要做的事,每次开会的会议信息都需要统计记录,这就涉及到了会议信息管理问题。该系统主要处理会议信息,该系统包括会议信息和部门信息。系统录入会议的相关信息,并且系统能够对会议信息和部门信息进行添加、浏览、查询、修改和删除操作。会议信息按照录入顺序排序,通过系统完成。

各个组成类的类图与类图之间的静态关系图

在这里插入图片描述

List 部分(用类实现的)

{
	CNode* pNode;
	Conference* pCon;
	int i;
	int Coyear, Comonth, Coday;  //会议日期
	long Conumber;  //会议编号
	char Coname[30];  //会议名称
	char Coplace[30];  //会议地点
	char Codepartment[30];  //部门名称
	char Cocompere[10];  //会议主持人
	char Corecorder[10];  //会议记录人
	int number;  //会议出席人数
	char Coattendant[25][10];  //会议出席人员(25人以内)
	char Cosummary[200];  //会议摘要(100字以内)
	cout << "请开始输入:";
	while (1)
	{
		pCon = new Conference;
		cout << "请输入会议名称:";
		cin.getline(Coname, 30);
		Clear(Coname,30);
		pCon->SetConame(Coname);
		cout << "请输入会议编号";
		cin>>NUM;
		Conumber = NUM;
		pCon->SetConumber(Conumber);
		Clear(Conumber);
		cout << "请输入会议日期:" << endl;
		cout << "年:";
		cin >> Coyear;
		Clear(Coyear);
		cout << "月:";
		cin >> Comonth;
		Clear(Coyear);
		cout << "日:";
		cin >> Coday;
		Clear(Coday);
		cin.ignore();
		pCon->Settime(Coyear, Comonth, Coday);
		cout << "请输入会议地点:";
		cin.getline(Coplace, 30);
		Clear(Coplace, 30);
		pCon->SetCoplace(Coplace);
		cout << "请输入部门名称:";
		cin.getline(Codepartment, 30);
		Clear(Codepartment, 30);
		pCon->SetCodepartment(Codepartment);
		cout << "请输入会议主持人:";
		cin.getline(Cocompere, 10);
		Clear(Cocompere, 10);
		pCon->SetCocompere(Cocompere);
		cout << "请输入会议记录人:";
		cin.getline(Corecorder, 10);
		Clear(Corecorder, 10);
		pCon->SetCorecorder(Corecorder);
		cout << "请输入会议出席人数";
		SetConsoleTextAttribute(hOut, 07);
		cout << "(25以内):";
		cin >> number;
		cin.ignore();
		Clear(number);
		pCon->Setnumber(number);
		cout << "请输入会议出席人数";
		SetConsoleTextAttribute(hOut, 07);
		cout << "(25以内):”;
		for (i = 0;i < number;i++)
		{
			cin.getline(Coattendant[i], 10);  //逐人次输入
			Clear(Coattendant[i], 10);
		}
		pCon->setCoattendant(Coattendant);
		cout << "请输入会议摘要(100字以内):”;
		cin.getline(Cosummary, 200);
		Clear(Cosummary, 200);
		pCon->SetCosummary(Cosummary);
		pNode = new CNode;
		pNode->InputData(pCon);
		ConferenceList.AddNode(pNode);
		cout << "按回车输入结束";
		break;
	}
	cout << endl << endl;
	system("pause");
}

DisplayRecord(CList& ConferenceList)函数/
void DisplayRecord(CList& ConferenceList)
{
	ConferenceList.ShowList();
	cout << endl<<endl ;
}
 LookUpRecord(CList& ConferenceList, int mode)函数///
CNode* LookUpRecord(CList& ConferenceList, int mode)// mode为0是纯查找,mode为1是查找+修改或者删除
{
	CNode* pLook;
	Conference conference;
	int sign;
	int Coyear, Comonth, Coday;
	char Coname[30];
	long Conumber;
	cout << "请输入查找方式:1、按会议日期  2、按会议名称  3、按会议编号  4、返回\n";
	cin >> sign;
	Clear(sign);
	if (sign == 1)
	{
		cout << "请输入您要查找的会议日期:\n";
		cout << "年:";
		cin >> Coyear;
		Clear(Coyear);
		while (Coyear != 0)
		{
			cout << "月:";
			cin >> Comonth;
			Clear(Comonth);
			cout << "日:";
			cin >> Coday;
			Clear(Coday);
			conference.Settime(Coyear, Comonth, Coday);
			pLook = ConferenceList.Lookup(conference, sign);  //sign=1是按日期			if (pLook)
			{
				cout << "找到日期为  " << Coyear << "年" << Comonth << "月" << Coday << "日" << " 的会议记录:" << endl;
				pLook->ShowNode();
			}
			else
				cout << "查找不到日期为  " << Coyear << "年" << Comonth << "月" << Coday << "日" << "的会议记录:" << endl;
			if (mode)
				return pLook;
			cout << "请输入您要查找的会议日期(年为“0”结束):";
			cout << "年:";
			cin >> Coyear;
			Clear(Coyear);
		}
		return NULL;
	}
	else if (sign == 2)
	{
		cin.ignore();
		cout << "请输入您要查找的会议名称(输入“0”结束):";
		cin.getline(Coname, 30);
		Clear(Coname, 30);
		while (strcmp(Coname, "0"))
		{
			conference.SetConame(Coname);
			pLook = ConferenceList.Lookup(conference, sign);  //sign==2是按会议名称			if (pLook)
			{
				cout << "找到名称为  " << Coname << "  的会议记录:" << endl;
				pLook->ShowNode();
			}
			else
				cout << "查找不到名称为  " << Coname << "的会议记录:" << endl;
			if (mode)
				return pLook;
			cout << "请输入您要查找的会议名称:";
			cin.getline(Coname, 30);
			Clear(Coname, 30);
		}
		return NULL;
	}
	else if (sign == 3)
	{
		cout << "请输入您要查找的会议编号(输入“0”结束):";
		cin >> Conumber;
		Clear(Conumber);
		while (Conumber != 0)
		{
			conference.SetConumber(Conumber);
			pLook = ConferenceList.Lookup(conference, sign);  //sign==3是按会议编号
			if (pLook)
			{
				cout << "找到会议编号为  " << Conumber << " 的会议记录:" << endl;
				pLook->ShowNode();
			}
			else
				cout << "查找不到编号为" << Conumber << "的会议记录:" << endl;
			if (mode)
				return pLook;
			cout << "请输入您要查找的会议编号(输入“0”结束):";
			cin >> Conumber;
			Clear(Conumber);
		}
		return NULL;
	}
	else
		return NULL;
	cout << endl << endl;
	system("pause");
}
//DeleteRecord(CList& ConferenceList)函数///
void DeleteRecord(CList& ConferenceList)
{
	CNode* pLook;
	Conference* conference;
	int Coyear, Comonth, Coday;  //会议日期
	char Coname[30];  //会议名称
	char Coplace[30];  //会议地点
	char Codepartment[30];  //部门名称
	char Cocompere[10];  //会议主持人
	char Corecorder[10];  //会议记录人
	int number;  //会议人数
	char Coattendant[25][10];  //会议出席人员(25人以内)
	char Cosummary[200];  //会议摘要(100字以内)
	int i;
	char sign;
	pLook = LookUpRecord(ConferenceList, 1);
	if (pLook)
	{
		cout << "操作:1、修改  2、删除  3、取消\n ";
		cin >> i;
		Clear(i);
		cin.ignore();
		if (i == 1)
		{
			cout << "请输入会议名称";
			cin.getline(Coname, 30);
			Clear(Coname, 30);
			cout << "请输入会议日期::" << endl;
			cout << "年:";
			cin >> Coyear;
			Clear(Coyear);
			cout << "月:";
			cin >> Comonth;
			Clear(Comonth);
			cout << "日:";
			cin >> Coday;
			cin.ignore();
			Clear(Coday);
			cout << "请输入会议地点:";
			cin.getline(Coplace, 30);
			Clear(Coplace, 30);
			cout << "请输入部门名称:";
			cin.getline(Codepartment, 30);
			Clear(Codepartment, 30);
			cout << "请输入会议主持人:";
			cin.getline(Cocompere, 10);
			Clear(Cocompere, 10);
			cout << "请输入会议记录人:";
			cin.getline(Corecorder, 10);
			Clear(Corecorder, 10);
			cout << "请输入会议出席人数";
			SetConsoleTextAttribute(hOut, 07);
			cout << "25以内):";
			cin >> number;
			cin.ignore();
			Clear(number);
			cout << "请输入会议出席人员:";
			for (i = 0;i < number;i++)
			{
				cin.getline(Coattendant[i], 10);  //逐人次输入
				Clear(Coattendant[i], 10);
			}
			cout << "请输入会议摘要(100字以内):";
			cin.getline(Cosummary, 200);
			Clear(Cosummary, 200);
			cout << "确认修改?(Y/N)";
			cin >> sign;
			if (sign == 'y' || sign == 'Y')
			{
				conference = pLook->GetData();
				conference->Settime(Coyear, Comonth, Coday);
				conference->SetConame(Coname);
				conference->SetCoplace(Coplace);
				conference->SetCodepartment(Codepartment);
				conference->SetCocompere(Cocompere);
				conference->SetCorecorder(Corecorder);
				conference->Setnumber(number);
				conference->setCoattendant(Coattendant);
				conference->SetCosummary(Cosummary);
				cout << "修改成功!" << endl;
			}
		}
		else if (i == 2)
		{
			cout << "确认删除?(Y/N)";
			cin >> sign;
			if (sign == 'y' || sign == 'Y')
			{
				ConferenceList.DeleteNode(pLook);
				cout << 删除成功!" << endl;
			}
		}
	}
	cout << endl << endl;
	system("pause");
}
Operate(string& strChoice, CList& ConferenceList))函数//
void Operate(string& strChoice, CList& ConferenceList)
{
	system("cls");
	if (strChoice == "1")
		AddRecord(ConferenceList);
	else if (strChoice == "2")
		DisplayRecord(ConferenceList);
	else if (strChoice == "3")
		LookUpRecord(ConferenceList, 0);
	else if (strChoice == "4")
		DeleteRecord(ConferenceList);
	else if (strChoice == "0")
		Write(ConferenceList);
}


main函数的流程图

在这里插入图片描述

main函数的具体实现(用类实现的)

int main()
{
	CList ConferenceList;
	Read(ConferenceList);
	string strChoice;
	do
	{
		system("cls");
		cout << "\t*******************【会议记录管理系统】*******************" << endl;
		cout << "\t1. 添加会议记录" << endl;
		cout << "\t2. 浏览所有会议记录" << endl;
		cout << "\t3. 查询会议记录" << endl;
		cout << "\t4. 修改或删除会议记录" << endl;
		cout << "\t0. 退出系统" << endl;
		cout << "请输入您的选择:";
		cin >> strChoice;
		cin.ignore();
		Operate(strChoice, ConferenceList);
	} while (strChoice != "0");
	cout << "\t欢迎再次使用会议记录管理系统"<< endl;
	return 0;
}

List代码(结构体方法实现)

#include<stdlib.h>//防止闪屏
#include<iostream>
using namespace std;
#include<stdio.h>
#include<string.h>
#define _CRT_SECURE_NO_WARNINGS


struct conference {
	char meetingNumber[20];								//会议编号
	char meetingDate[20];								//会议日期
	char meetingTitle[30];							    //会议名称
	char meetingPlace[20];								//会议地点
	char meetingModerator[20];						    //会议主持人
	char meetingRecorder[20];							//会议记录人
	char presentMembers[40];						    //会议出席人员
	int number;										    //会议出席人数
	char meetingAbstract[200];						    //会议摘要在一百字以内
	char depertmentTitle[30];							//部门名称

};
//创建链表
struct Node {
	//int data;
	struct conference data;
	struct Node* next;
};
struct Node* creatList() {
	struct Node* headNode = (struct Node*)malloc(sizeof(struct  Node));
	if (NULL == headNode) {
		printf("无法动态申请内存!\n");
		exit(-1);
	}
	headNode->next = NULL;
	return headNode;
};

//创建结点
struct Node* createNode(struct conference data)
{
	struct Node* newNode = (struct Node*)malloc(sizeof(struct  Node));
	if (NULL == newNode) {
		printf("无法动态申请内存!\n");
		exit(-1);
	}
	newNode->data = data;
	newNode->next = NULL;
	return newNode;
};
//插入结点
void insertNodeByHead(struct Node* headNode, struct conference data)
{
	struct Node* newNode = createNode(data);
	//表头法插入
	newNode->next = headNode->next;
	headNode->next = newNode;
}
//指定位置删除
void deleteAppoinNode(struct Node* headNode,char* meetingNumber)
{
	struct Node* posNode = headNode->next;
	struct Node* posFrontNode = headNode;
	if(posNode ==NULL)
	{
		printf("数据为空,无法删除!\n");
		return;
	}
	while (strcmp(posNode->data.meetingNumber, meetingNumber))
	{
		posFrontNode = posNode;
		posNode = posFrontNode->next;
		if (posNode == NULL)
		{
			printf("未找到指定位置无法删除!\n");
			return;
		}
	}
	//找到了
	posFrontNode->next = posNode->next;
	free(posNode);
}
//查找功能
 struct Node* searchInfoByData(struct Node* headNode, char* meetingNumber)
 {
	 struct Node* pMove = headNode->next;
	 if (pMove == NULL)
	 {
		 return NULL;
	 }
	 while (strcmp(pMove->data.meetingNumber, meetingNumber))
	 {
		 pMove = pMove->next;
	 }
	 return pMove;
 }
 //文件读操作
 void readInfoFromFile(struct Node* headNode,const char *filename)
 {
	 //打开文件
	 FILE* fp;
	 struct conference data;
	 fp = fopen(filename, "r");
	 if(fp == NULL)
	 {
		fp = fopen(filename, "w+");		 
	 }
	 //读文件
	 while(fscanf(fp,"%s\t,%s\t,%s\t,%s\t,%s\t,%s\t,%s\t,%d\t,%s\t,%s\n", data.meetingNumber, data.meetingDate, data.meetingTitle, data.meetingPlace, data.meetingModerator, data.meetingRecorder, data.presentMembers, &data.number, data.meetingAbstract, data.depertmentTitle) != EOF)
	 {
		 insertNodeByHead(headNode, data);
	 }
	 //关闭文件
	 fclose(fp);
 }
 
 // 文件写过程
 void writeInfoToFile(struct Node* headNode,const char* filename)
 {
	 FILE* fp;
	 fp = fopen(filename, "w");
	 if (fp == NULL)
	 {
		 printf("文件写操作错误");
		 return;
	 }
	 struct Node* pMove = headNode->next;
	 while (pMove)
	 {
		 pMove = pMove->next;
		 fprintf(fp, "%s\t,%s\t,%s\t,%s\t,%s\t,%s\t,%s\t,%d\t,%s\t,%s\n", pMove->data.meetingNumber, pMove->data.meetingDate, pMove->data.meetingTitle, pMove->data.meetingPlace, pMove->data.meetingModerator, pMove->data.meetingRecorder, pMove->data.presentMembers, pMove->data.number, pMove->data.meetingAbstract, pMove->data.depertmentTitle);
	 }
	 fclose(fp);
 }


//打印链表
void printList(struct Node* headNode) 
{
	struct Node* pMove = headNode->next;
	//涉及到数据的处理
	printf("会议编号,会议日期,会议名称,会议地点,会议主持人,会议记录人,会议出席人员,会议出席人数,会议摘要,部门名称\n");
	while(pMove )
	{
		cout << pMove->data.meetingNumber<< pMove->data.meetingDate<<pMove->data.meetingTitle<<pMove->data.meetingPlace<< pMove->data.meetingModerator<<pMove->data.meetingRecorder<<pMove->data.presentMembers<<pMove->data.number<< pMove->data.meetingAbstract<< pMove->data.depertmentTitle<<endl;
		printf("\n");
		pMove = pMove->next;
	}
	printf("\n");
}

main函数部分(结构体方法实现)


```cpp

//制作会议信息管理系统
/**
* 1.界面
* 2.数据结构设计    //需求跟数据结构糅合在一起很丑
* 3.交互
**/

//数据的设计----->将会议信息抽象
//菜单设计
#include<iostream>			//测试类
#include<stdlib.h>//防止闪屏
#include<stdio.h>
#include"MyList.h"
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
void menu() {
	printf("----------------【会议信息管理系统】-------------------\n");
	printf("\t\t0.推出会议系统\n");
	printf("\t\t1.添加会议记录\n");
	printf("\t\t2.浏览会议记录\n");
	printf("\t\t3.查找会议记录\n");
	printf("\t\t4.修改会议记录\n");
	printf("\t\t5.删除会议记录\n");
	printf("-------------------------------------------------------\n");
}
struct Node* list = creatList();
//用户交互
//根据所选的菜单项,做相应的事情
void keyDown() {
	int choice = 0;
	struct Node* pMove = NULL;
	struct conference data;
	scanf_s("%d", &choice);
	switch (choice) {
	case 0:
		printf("正常退出\n");
		system("pause");
		exit(0);
		break;
	case 1:
		printf("------------------【添加会议记录】---------------------\n");
		//插入链表
		printf("会议编号,会议日期,会议名称,会议地点,会议主持人,会议记录人,会议出席人员,会议出席人数,会议摘要,部门名称\n");
		fflush(stdin);				//清空缓存区
		cin>>data.meetingNumber>>data.meetingDate>>data.meetingTitle>>data.meetingPlace>>data.meetingModerator>>data.meetingRecorder>>data.presentMembers>>data.number>>data.meetingAbstract>>data.depertmentTitle;
		insertNodeByHead(list, data);
		break;
	case 2:
		printf("------------------【浏览会议记录】---------------------\n");
		printList(list);//打印链表
		break;
	case 3:
		printf("------------------【查找会议记录】---------------------\n");
		printf("请输入要查找的会议记录编号");
		cin >> data.meetingNumber;
		pMove = searchInfoByData(list, data.meetingNumber);
		if(pMove == NULL)
		{
			printf("未找到相关会议编号记录,无法删除\n");
			system("pause");
		}
		else
		{
			printf("会议编号,会议日期,会议名称,会议地点,会议主持人,会议记录人,会议出席人员,会议出席人数,会议摘要,部门名称\n");
			cout << pMove->data.meetingNumber<<pMove->data.meetingDate<<pMove->data.meetingTitle<< pMove->data.meetingPlace<< pMove->data.meetingModerator<<pMove->data.meetingRecorder<<pMove->data.presentMembers<<pMove->data.number<< pMove->data.meetingAbstract<<pMove->data.depertmentTitle;
		}
		break;
	case 4:
		printf("------------------【修改会议记录】----------------------\n");
		break;
	case 5:
		printf("------------------【删除会议记录】----------------------\n");
		printf("请输入要删除的会议记录编号");
		cin >> data.meetingNumber;
		deleteAppoinNode(list, data.meetingNumber);
		break;
	default:
		printf("输入错误,重新输入\n");
		system("pause");
		system("cls");
		break;

	}
	writeInfoToFile(list, "1.txt");
}






int main() {
	readInfoFromFile(list, "1.txt");
	while (1) {
		menu();
		keyDown();
		system("pause");
		system("cls");
	}
	/*struct Node* list = creatList();
	insertNodeByHead(list, 1);
	insertNodeByHead(list, 2);
	insertNodeByHead(list, 3);
	insertNodeByHead(list, 0);
	printList(list);
	printf("删除指定结点\n");
	deleteAppoinNode(list, 3);
	printList(list);
	printf("数据的查找\n");
	printf("%d",searchInfoByData(list, 2)->data);*/
	
	system("pause");
	return 0;
}
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值