数据结构与程序课程综合实践
实践1: 文件加解密
目的
(1)文件访问
(2)加解密文件
内容
(1)文件及其访问
掌握数据文件建立、数据的读写访问,包括文本文件、二进制文件
(2)文件加解密
采用位运算方法对文件进行加密和解密。采用主函数带参数方法。
作业要求
(1)实现人员数据文件的建立、访问;
(2)实现加密程序,要求加解密文件本身,不建立新文件。
实践2:基于顺序存储的人员信息管理系统
目的
掌握线性表的顺序存储
内容
顺序存储结构的设计、访问
作业要求
以类似人事管理系统为例,进行顺序存储的访问(建立、初始化、增、删、改):
假设人员信息记录包括编号、姓名、性别、年龄、出生年月日、工资和住址。功能要求:①增加人员记录;②修改人员记录;③删除人员记录;④查询人员记录;⑤显示人员记录。
设计思路:
①采用结构体类型描述人员信息;
②设定足够大的结构体类型数组存储人员信息;
③考虑管理的五个功能都要访问人员数据,把结构体数组设置为全局数组,同时定义全局变量记录当前人员个数;
④设计一个菜单,显示五个功能项;
五个功能设计要求;
增加人员记录
可随机增加人员信息,但要求人员信息有按编号从小到大排序。
修改人员记录
可修改人员信息。如果修改人编号,还要保留人员信息的有序性。
删除人员记录
可删除人员记录。首先根据人员编号定位即将删除人员,再进行删除。
查询人员记录
根据人员编号可查询到人员记录及其在数组中位置(下标)。建议先排序,再用折半查询。
显示人员记录
以交互方式按页(每页25行)方式显示所有人员记录信息。
除了上述五个功能函数外,还可设计其他辅助函数,以提高程序模块化程度。
#include "stdio.h"
#include "string.h"
#define OK 1//符号常量
#define ERROR -1
#define MAXSIZE 200//人群大小
typedef int Status;
struct DATE //日期结构体类型
{ int month, day, year; };
typedef char NAME[20];//姓名字符数组类型
typedef char ADDRESS[500];//住址字符数组类型
typedef struct //人员结构体类型定义
{
int num;//编号,变量成员
NAME name; //姓名,数组成员
char sex; //性别,变量成员
struct DATE birth;//日期,变量成员
float salary;//工资,变量成员
ADDRESS address;//住址,数组成员
}PERSON;//人员数据类型
typedef struct
{
PERSON person[MAXSIZE];//人员集合
int count;//实际人数
}PEOPLE;//人员集合结构体类型定义
void Init();//函数声明
void Input();
Status Add();
Status Update();
Status Delete();
Status Locate();
void Sort();
void Display();
void DisplayAll();
void DisplayPerson();
void Menu();
void OpenDataFile(char *filename,PEOPLE *people);
void CloseDataFile(char *filename,PEOPLE *people);
void main()
{
PEOPLE people;//定义人员存储空间
FILE *fp;
char filename[200]="d:\\C_EX2018\\workers.rec";
Init(&people); //初始化人员集合
OpenDataFile(filename,&people);//打开数据文件,读数据集
Menu(&people);//人员系统菜单操作
CloseDataFile(filename,&people);//关闭数据文件,写数据集
}
void Menu(PEOPLE *people)//功能菜单
{
char sel;//菜单选项
int index,num;//人员在集合中下标、人员编号
PERSON person;//人员变量
while(1)//无限循环
{
printf("1.增加人员 Add Person.\n");//菜单项
printf("2.更新人员 Update Person.\n");
printf("3.删除人员 Delete Person.\n");
printf("4.查询人员 Query Person.\n");
printf("5.显示人员 Display People.\n");
printf("6.退出 Exit.\n");
sel=getch();
index=-1;
switch(sel)
{
case '1':Input(&person);//输入一个人员
if(Add(people,person)==ERROR) //加入人员成功?
{
printf("不能加入人员.\n");
break;
}
Sort(people);//人员集合排序
break;
case '2':printf("Number:");//输入人员编号
scanf("%d",&num);
if(Locate(people,num,&index)==ERROR)//人员定位(查询)成功?
{
printf("没找到.\n");
break;
}
Display(people,index);//显示找到人员
Input(&person);//输入人员信息
if(Update(people,index,person)==ERROR)//人员信息更新成功?
{
printf("不能更新人员.\n");
break;
}
Sort(people);//人员集合排序
break;
case '3':printf("Number:");//输入人员编号
scanf("%d",&num);
if(Locate(people,num,&index)==ERROR)//人员定位(查询)成功?
{
printf("没找到.\n");
break;
}
Display(people,index);//显示找到人员
if(Delete(people,index,&person)==ERROR)//人员删除成功?
printf("不能删除人员\n");
break;
case '4':printf("Number:");//输入人员编号
scanf("%d",&num);
if(Locate(people,num,&index)==ERROR)//人员定位(查询)成功?
{
printf("没找到.\n");
break;
}
Display(people,index);//显示找到人员
break;
case '5':DisplayAll(people);//显示所有人员
break;
case '6':printf("===End===\n");//退出菜单
return;
}
}
}
版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。