这两天把动态内存还有文件函数这部分的课听了一下,也跟着把通讯录升级了一下
存储元素不再是固定的了,当存储的元素等于上限时内存就动态增长
每次退出信息又会销毁,可以用fwrite 和 fread让它保存到文件中,不过每次fwrite它就会覆盖之前的内容,所以每次初始化的时候都要先读取出来,等退出了再一次性读取写入文件中,数量多的话速度就会慢,想实现一下,今晚就下了个MySQL,听听网课琢磨琢磨
把这个改进版记录下来
int main()
{
srand((unsigned int)time(NULL));
game();
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#define MAX_NAME 16
#define MAX_SAT 6
#define MAX_TELE 12
#define MAX_ADDR 15
//#define MAX 100
#define DEFAULT_SZ 3
定义在头文件的函数声明
各个的作用都写下来了
void game();
void menu();//菜单
void chushihua(struct uct* p1);
void addformation(struct uct* p1);//增加信息
void showformation(struct uct* p1);//显示信息
void subformation(struct uct* p1);//删除信息
void searchformation(const struct uct* p1);//查找信息
void modifyformation(struct uct* p1);//改动信息
int cmp_stu_name(const void* p1, const void* p2);//比较结构体内的姓名
void IncreasetCapacity(struct uct*p1);//检测存储是否满了
void realise(struct uct* p1);//释放动态内存
void savecontact(struct uct* p1);//保存信息
void loadcontact(struct uct* p1);//从文件中读取信息
enum arr
{
EXIT,
ADD,
SUB,
SEARCH,
MODIFY,
SHOW,
SORT,
SAVE
};
struct information
{
char name[MAX_NAME];
int age;
char set[MAX_SAT];
char tele[MAX_TELE];
char addr[MAX_ADDR];
};
struct uct
{
struct information *data;
int size;
int capacity;
};
我一般喜欢函数从上往下实现
void menu()
{
printf("*******************************\n");
printf("*****1 add 2 sub*****\n");
printf("*****3 search 4 modify**\n");
printf("*****5 show 6 sort****\n");
printf("*****7 save 0 exit****\n");
printf("*******************************\n");
}
void IncreasetCapacity(struct uct* p1);//动态增加信息
void loadcontact(struct uct* p1)
{
struct information tmp = {
0 };
FILE* pfRead = fopen("test.dat"