@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;
}