Part2 1
项目分析: 1. 功能描述:
本项目要实现一个简单信息管理系统,该系统具有四大功能:输入功能,查询功能,修改删除功能,显示功能:
1、输入功能:添加输入教职工的信息,并在文件中保存下来。 2、查询功能:查找已存入的教职工信息。
3、修改删除功能:修改或删除已存教职工信息。
4、显示功能:显示存入的教职工信息以及在修改删除后显示人员信息。
2.项目分析:
确定项目功能后,依据功能进行类和数据结构的设计。系统中采用单向链表结构管理教职工信息。
1、教职工信息的输入、添加
项目中使用文件(Esystemsave.dat)保存输入和添加的教职工信息。 2、教职工信息查询
信息查询功能中提供了按指定条件进行信息查询功能。用户可以对产品的指定属性按某个条件进行精确查询或范围查询。 3、教职工职称排序
通过链表对教职工信息依次访问,按职称大小依次排序显示输出 4、修改信息功能
管理系统中可以随时通过姓名和电话号码精确找到人员信息并且修改。 5、删除信息功能
管理系统中可以随时通过姓名和工号精确找到人员信息并且删除。 6、显示教职工信息
包括姓名、性别、工号、电话、所在系部、职称等信息。 8、信息保存功能
运行期间可以保存人员信息,将人员信息存入文件(Esystemsave.dat)中。
设计思路:
定义Technical_Date结构体,定义姓名、性别、工号、电话号码、所在
系部、职称等数据。再定义Technical类,在类中定义题目所需要求的函数:Add_Technical_Information(); // 添加人员信息函数;Query_Information(); // 查询功能;
Technical_Title_Statistics(); //查询功能中的职工按系部统计职工职称 Technical_Title_Sort(); //根据教职工职称按排序输出 Modify_Technical_Information() //根据工号查找到该工号教职工信 息并修改职工信息
Display_All_Technical_Date();
Delete_Technical_Information();
//根据工号查找到该工号教职工信息并 删除职工信息
//6显示所有教职工信息(息;
Display_after_all_person_information(); // 在4,5功能执行后选择是否显示所有职工信息。
使用链表进行数据的存储,方便添加人员信息。
项目实现:
首先在VC 6.0中创建一个C++项目并添加相应的文件。系统功能通过多个函数实现,类的定义及实现由各个头文件给出:
#include
1.定义Technical_Date结构体
struct Technical_Date {
char Technical_Name[15]; char Technical_Sex;
//教职工姓名 //教职工性别
//教职工数据
char Technical_Job_Number[15]; char Technical_Phone_Number[15]; char Technical_Department[15]; char Technical_Title[20];
//教职工工号 //教职工所在系部 //教职工职称
//教职工电话
bool date_access; };
//用于判断节点信息是否被访问,初始状态为未被访问false,被访问过为true
//储存下一个节点的地址
struct Technical_Date * next;
2. 定义Technical类
class Technical { public:
Technical() { }
void System_Menu();
//系统主界面菜单
void Add_Technical_Information(); void Query_Information();
//添加职工信息并保存到文件
//查询功能
strcpy_s(file_address, \//初始化储存职工信息文件的地址,该函System_Menu();
数将第二个字符串参数复制给第一个字符串参数
void Technical_Title_Statistics(struct Technical_Date* chain_head, int choice_judge);//void Technical_Title_Sort();
//根据教职工职称按排序输出
查询功能中的职工按系部统计职工职称
void Modify_Technical_Information(); //根据工号查找到该工号教职工信息并修改职工信息 void Delete_Technical_Information(); //根据工号查找到该工号教职工信息并删除职工信息 void Display_All_Technical_Date();
//显示所有教职工信息(
//读文件并构建职工数据结构体链表返回该链表头指针,若存储职工的文件里无职工数据则返回NULL(完)
struct Technical_Date* read_file_date();
//以ios::out方式(第二个参数为1)或ios::app方式(第二个参数为2)打开二进制文件并将职工数据结构体链表数据写入文件(完)
void write_file_date(struct Technical_Date* write_chain_head, int open_mode); void Display_Link_list_Date(struct Technical_Date* display_chain_head);//显示链表中数据
void Delete_Link_List(struct Technical_Date* delete_chain_head);//释放单向链表所占空间 void new_date_access(struct Technical_Date* chain_head) //将链表节点中的date_access全恢
复为未被访问状态false private: };
struct Technical_Date *head; char file_address[25];
//职工数据结构体链表头指针
//储存文件的地址
3.定义主菜单
void Technical::System_Menu() {
char Menu_Choice[10];
//输入的菜单选项选择
ofstream create_save_file(file_address, ios::app | ios_base::binary);
//创建存储职工信息数据的二进制文件 create_save_file.close();
4.添加人员信息函数(使用链表)
void Technical::Add_Technical_Information() {
//用于建立链表
struct Technical_Date *p1 = NULL; struct Technical_Date *p2 = NULL; int n = 0;
//---------------------------------------------------------------------- int employee_count = 0;//记入添加的职工个数 char yes_no[10];//决定是否继续输入职工数据信息 cout << \请输入职工信息\ << endl;
//------------------------------------------------------------------------ head = NULL;//将NULL赋值给链表头指针
p1 = (struct Technical_Date *)malloc(sizeof(struct Technical_Date));//给p1开辟一块
Employee_Date结构体大小的空间
do {
//判断是否要继续输入职工信息
bool choice_no = false;//若为真则跳出循环 do {
cout << \是否输入(y/n):\; cin >> yes_no;
if (!strcmp(yes_no, \)) { } else
cout << \无效输入请重新输入!\ << endl; choice_no = true; break; break;
else if (!strcmp(yes_no, \))
} while (true); if (choice_no)
break; //构建链表
employee_count = employee_count + 1; n = n + 1; if (n == 1) { } p2 = p1; cout <<
p1 = (struct Technical_Date *)malloc(sizeof(struct Technical_Date)); p2->next = p1; head = p1; else
\ << endl;
do {
cout << \电话:\; cin >> p1->Technical_Phone_Number; bool panduan = true;
cout << \教职工\ << employee_count << endl; cout << \姓名:\; cin >> p1->Technical_Name; cout << \性别:\; cin >> p1->Technical_Sex; cout << \工号:\; cin >> p1->Technical_Job_Number;
相关推荐: