不用哈夫曼树的前提下对家庭族谱信息能够进行录入、修改等操作,有菜单界面和退出功能,系统以菜单方式进行工作
家庭族谱管理应包括:姓名、性别、出生年月日、祖籍等信息,该系统应该具有以下功能:
1、家庭族谱管理信息录入功能--输入;
2、增加家庭成员信息;
3、家庭族谱信息浏览--输出;
4、查询家庭族谱信息;
5、家庭族谱信息删除;
6、家庭族谱信息修改;
7、数据保存;
8、数据读取。
#include <stdio.h>
#include <string.h>
#define MAX_PERSONS 100 // 最大人数
#define NAME_LENGTH 20 // 名字最大长度
struct Person {
char name[NAME_LENGTH]; // 姓名
char gender; // 性别,'M' 代表男性,'F' 代表女性
int age; // 年龄
struct Person* father; // 父亲
struct Person* mother; // 母亲
struct Person* spouse; // 配偶
struct Person* children[MAX_PERSONS]; // 孩子数组
};
struct Person persons[MAX_PERSONS]; // 人员数组
int nPersons = 0; // 当前人数
void print_menu() {
printf("\nFamily Tree Management System\n");
printf("--------------------------------\n");
printf("1. Add a person\n");
printf("2. Modify a person\n");
printf("3. Remove a person\n");
printf("4. Search a person\n");
printf("5. List all persons\n");
printf("6. Exit\n");
printf("Enter your choice (1-6): ");
}
void add_person() {
// 输入新成员的信息并添加到数组中
}
void modify_person() {
// 根据姓名或编号搜索要修改的人员,修改其信息
}
void remove_person() {
// 根据姓名或编号搜索要删除的人员,将其从数组中删除
}
void search_person() {
// 根据姓名或编号搜索人员,并打印其信息
}
void list_all_persons() {
// 打印所有人员的信息
}
int main() {
int choice;
do {
print_menu();
scanf("%d", &choice);
switch (choice) {
case 1:
add_person();
break;
case 2:
modify_person();
break;
case 3:
remove_person();
break;
case 4:
search_person();
break;
case 5:
list_all_persons();
break;
case 6:
printf("Thank you for using the system!\n");
break;
default:
printf("Invalid choice! Please try again.\n");
break;
}
} while (choice != 6);
return 0;
}
```
这个伪代码实现了一个简单的家谱管理系统。用户可以通过菜单选择要进行的操作,如添加一个成员、修改一个成员、删除一个成员、搜索一个成员、列出所有成员等等。这个伪代码只包括框架和函数声明,您需要根据具体需求自己实现每个函数的具体功能。
//C语言家谱管理系统
#include< stdio.h >
#include< stdlib.h >
#include< string.h >
//定义家庭族谱结构体
typedef struct family
{
char name[20];
char gender[4];
char birth[20];
char birthplace[20];
}family;
//声明函数
void menu();
void input();
void add();
void output();
void search();
void delete();
void modify();
void save();
void read();
//主函数
int main()
{
menu();
return 0;
}
//菜单函数
void menu()
{
int n;
while(1)
{
printf("\n--------家庭族谱管理系统--------\n");
printf("1、家庭族谱信息录入\n");
printf("2、增加家庭成员信息\n");
printf("3、家庭族谱信息浏览\n");
printf("4、查询家庭族谱信息\n");
printf("5、家庭族谱信息删除\n");
printf("6、家庭族谱信息修改\n");
printf("7、数据保存\n");
printf("8、数据读取\n");
printf("0、退出系统\n");
printf("请输入你要进行的操作:");
scanf("%!d(MISSING)",&n);
switch(n)
{
case 1:input(); break;
case 2:add(); break;
case 3:output(); break;
case 4:search(); break;
case 5:delete(); break;
case 6:modify(); break;
case 7:save(); break;
case 8:read(); break;
case 0:exit(0); break;
default:printf("输入有误,请重新输入!\n"); break;
}
}
}
//家庭族谱管理信息录入功能
void input()
{
FILE *fp;
family fm;
int n;
if((fp=fopen("family.dat","a"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
while(1)
{
printf("请输入家庭成员信息:\n");
printf("姓名:");
scanf("%!s(MISSING)",fm.name);
printf("性别:");
scanf("%!s(MISSING)",fm.gender);
printf("出生年月日:");
scanf("%!s(MISSING)",fm.birth);
printf("祖籍:");
scanf("%!s(MISSING)",fm.birthplace);
fwrite(&fm,sizeof(family),1,fp);
printf("是否继续录入?1.继续 其他.退出\n");
scanf("%!d(MISSING)",&n);
if(n!=1)
break;
}
fclose(fp);
}
//增加家庭成员信息
void add()
{
FILE *fp;
family fm;
if((fp=fopen("family.dat","a"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
printf("请输入家庭成员信息:\n");
printf("姓名:");
scanf("%!s(MISSING)",fm.name);
printf("性别:");
scanf("%!s(MISSING)",fm.gender);
printf("出生年月日:");
scanf("%!s(MISSING)",fm.birth);
printf("祖籍:");
scanf("%!s(MISSING)",fm.birthplace);
fwrite(&fm,sizeof(family),1,fp);
fclose(fp);
}
//家庭族谱信息浏览
void output()
{
FILE *fp;
family fm;
int i;
if((fp=fopen("family.dat","r"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
printf("家庭族谱信息浏览:\n");
printf("序号\t姓名\t性别\t出生日期\t\t祖籍\n");
i=1;
while(!feof(fp))
{
fread(&fm,sizeof(family),1,fp);
printf("%!d(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\n",i,fm.name,fm.gender,fm.birth,fm.birthplace);
i++;
}
fclose(fp);
}
//查询家庭族谱信息
void search()
{
FILE *fp;
char name[20];
family fm;
int flag=0;
if((fp=fopen("family.dat","r"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
printf("请输入查询家庭成员信息:\n");
printf("姓名:");
scanf("%!s(MISSING)",name);
while(!feof(fp))
{
fread(&fm,sizeof(family),1,fp);
if(strcmp(name,fm.name)==0)
{
printf("家庭成员信息:\n");
printf("姓名:%!s(MISSING)\t性别:%!s(MISSING)\t出生日期:%!s(MISSING)\t祖籍:%!s(MISSING)\n",fm.name,fm.gender,fm.birth,fm.birthplace);
flag=1;
break;
}
}
if(flag==0)
printf("家庭成员信息不存在!\n");
fclose(fp);
}
//家庭族谱信息删除
void delete()
{
FILE *fp;
char name[20];
family fm;
int flag=0;
if((fp=fopen("family.dat","r+"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
printf("请输入要删除家庭成员信息:\n");
printf("姓名:");
scanf("%!s(MISSING)",name);
while(!feof(fp))
{
fread(&fm,sizeof(family),1,fp);
if(strcmp(name,fm.name)==0)
{
printf("家庭成员信息:\n");
printf("姓名:%!s(MISSING)\t性别:%!s(MISSING)\t出生日期:%!s(MISSING)\t祖籍:%!s(MISSING)\n",fm.name,fm.gender,fm.birth,fm.birthplace);
printf("家庭成员信息已删除!\n");
fseek(fp,-sizeof(family),1);
fwrite(&fm,sizeof(family),1,fp);
flag=1;
break;
}
}
if(flag==0)
printf("家庭成员信息不存在!\n");
fclose(fp);
}
//家庭族谱信息修改
void modify()
{
FILE *fp;
char name[20];
family fm;
int flag=0;
if((fp=fopen("family.dat","r+"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
printf("请输入要修改家庭成员信息:\n");
printf("姓名:");
scanf("%!s(MISSING)",name);
while(!feof(fp))
{
fread(&fm,sizeof(family),1,fp);
if(strcmp(name,fm.name)==0)
{
printf("家庭成员信息:\n");
printf("姓名:%!s(MISSING)\t性别:%!s(MISSING)\t出生日期:%!s(MISSING)\t祖籍:%!s(MISSING)\n",fm.name,fm.gender,fm.birth,fm.birthplace);
printf("请输入新的家庭成员信息:\n");
printf("姓名:");
scanf("%!s(MISSING)",fm.name);
printf("性别:");
scanf("%!s(MISSING)",fm.gender);
printf("出生日期:");
scanf("%!s(MISSING)",fm.birth);
printf("祖籍:");
scanf("%!s(MISSING)",fm.birthplace);
fseek(fp,-sizeof(family),1);
fwrite(&fm,sizeof(family),1,fp);
printf("家庭成员信息修改成功!\n");
flag=1;
break;
}
}
if(flag==0)
printf("家庭成员信息不存在!\n");
fclose(fp);
}
//数据保存
void save()
{
FILE *fp;
family fm;
int i;
if((fp=fopen("family.dat","r"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
if((fp=fopen("family.txt","w"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
printf("家庭族谱信息保存:\n");
printf("序号\t姓名\t性别\t出生日期\t\t祖籍\n");
i=1;
while(!feof(fp))
{
fread(&fm,sizeof(family),1,fp);
fprintf(fp,"%!d(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\n",i,fm.name,fm.gender,fm.birth,fm.birthplace);
i++;
}
fclose(fp);
printf("数据保存成功!\n");
}
//数据读取
void read()
{
FILE *fp;
family fm;
int i;
if((fp=fopen("family.txt","r"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
printf("家庭族谱信息读取:\n");
printf("序号\t姓名\t性别\t出生日期\t\t祖籍\n");
i=1;
while(!feof(fp))
{
fscanf(fp,"%!d(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\n",&i,fm.name,fm.gender,fm.birth,fm.birthplace);
printf("%!d(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\n",i,fm.name,fm.gender,fm.birth,fm.birthplace);
i++;
}
fclose(fp);
printf("数据读取成功!\n");
}