@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();}elsecout << "查找不到日期为 " << 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();}elsecout << "查找不到名称为 " << 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();}elsecout << "查找不到编号为" << Conumber << "的会议记录:" << endl;if (mode)return pLook;cout << "请输入您要查找的会议编号(输入“0”结束):";cin >> Conumber;Clear(Conumber);}return NULL;}elsereturn 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_WARNINGSstruct 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;
}