hospital.h文件内容
#ifndef __SLIST_H__
#define __SLIST_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAGIC "darr"
#define SIZE 32
#define DEBUG(msg) printf("file: %s func: %s line: %d %s", __FILE__, __func__, __LINE__, msg)
//函数指针类型
typedef int(*op_t)(void *data);
typedef int(*cmp_t)(void *data, void *key);
typedef int(*op_file_t)(void *data, FILE *fp);
//节点类型
typedef struct _node_t{
void *data; //数据域
struct _node_t *next; //后继指针
}node_t;
//头信息结构体
typedef struct _darr_t{
node_t *p; //指向链表的第一个节点
int size; //数据的大小
int count; //链表节点的个数
op_t my_destroy;//自定义销毁
}darr_t;
//头信息结构体的创建
darr_t *darr_create(int size, op_t my_destroy);
//头插
int darr_prepend(darr_t *s, void *data);
//尾插
int darr_append(darr_t *s, void *data);
//根据索引插入节点
int darr_insert_by_index(darr_t *s, void *data, int index);
//节点个数
int darr_count(darr_t *s);
//通过索引检索值
int darr_retrieve_by_index(darr_t *s, void *data, int index);
//通过关键字检索数据
int darr_retrieve_by_key(darr_t *s, void *data, void *key, cmp_t my_cmp);
//通过关键字查找索引
int darr_find_index_by_key(darr_t *s, void *key, cmp_t my_cmp);
//通过关键字查找所有的索引
darr_t *darr_find_all_index_by_key(darr_t *s, void *key, cmp_t my_cmp);
//通过索引值修改数据
int darr_modify_by_index(darr_t *s, void *data, int index);
//通过关键字修改对应的数据
int darr_modify_by_key(darr_t *s, void *data, void *key, cmp_t my_cmp);
//通过关键字修改所有的数据
int darr_modify_all_by_key(darr_t *s, void *data, void *key, cmp_t my_cmp);
//通过索引删除节点
int darr_delete_by_index(darr_t *s, int index);
//通过关键字删除节点
int darr_delete_by_key(darr_t *s, void *key, cmp_t my_cmp);
//通过关键字删除所有的节点
int darr_delete_all_by_key(darr_t *s, void *key, cmp_t my_cmp);
//保存数据
int darr_store(darr_t *s, char *path, op_file_t op_write);
//加载数据
int darr_load(darr_t *s, char *path, op_file_t op_read);
//链表的反转
int darr_reverse(darr_t *s);
//遍历
int darr_traverse(darr_t *s, op_t my_print);
//销毁
int darr_destroy(darr_t *s);
#endif /*__SLIST_H__*/
hospital.c文件内容
#include "hospital.h"
//头信息结构体的创建
darr_t *darr_create(int size, op_t my_destroy)
{
darr_t *s = NULL;
if (size <= 0)
{
DEBUG("size <= 0\n");
goto err0;
}
//分配空间
s = malloc(sizeof(darr_t));
if (NULL == s)
{
DEBUG("malloc failed..\n");
goto err0;
}
memset(s, 0, sizeof(darr_t));
//初始化
s->p = NULL;
s->size = size;
s->count = 0;
s->my_destroy = my_destroy;
return s;
err0:
return NULL;
}
//分配节点的函数
static node_t *__node_alloc(darr_t *s, void *data)
{
node_t *new = NULL;
//容错判断
if (NULL == s || NULL == data)
{
DEBUG("some elements are NULL\n");
goto err0;
}
//分配节点空间
new = malloc(sizeof(node_t));
if (NULL == new)
{
DEBUG("malloc failed...\n");
goto err0;
}
memset(new, 0, sizeof(node_t));
//分配数据域的空间
new->data = malloc(s->size);
if (NULL == new->data)
{
DEBUG("malloc data failed...\n");
goto err1;
}
memset(new->data, 0, s->size);
//初始化节点
memcpy(new->data, data, s->size);
new->next = NULL;
s->count ++;
return new;
err1:
free(new);
err0:
return NULL;
}
//头插
int darr_prepend(darr_t *s, void *data)
{
node_t *new = NULL;
if (NULL == s || NULL == data)
{
DEBUG("some elements are NULL\n");
goto err0;
}
//分配节点空间
new = __node_alloc(s, data);
if (NULL == new)
goto err0;
//头插
new->next = s->p;
s->p = new;
return 0;
err0:
return -1;
}
//尾插
int darr_append(darr_t *s, void *data)
{
node_t *tmp = NULL;
node_t *new = NULL;
if (NULL == s || NULL == data)
{
DEBUG("some elements are NULL\n");
goto err0;
}
//分配节点空间
new = __node_alloc(s, data);
if (NULL == new)
goto err0;
if (NULL == s->p)
{
s->p = new;
}
else
{
//tmp指向第一个节点
tmp = s->p;
//tmp指向链表的最后一个节点
while(NULL != tmp->next)
tmp = tmp->next;
tmp->next = new;
}
return 0;
err0:
return -1;
}
//根据索引插入节点
int darr_insert_by_index(darr_t *s, void *data, int index)
{
int i = 0;
node_t *new = NULL;
node_t *tmp = NULL;
if (NULL == s || NULL == data)
{
DEBUG("some elements are NULL\n");
goto err0;
}
if (index < 0 || index > s->count)
{
DEBUG("The index is out of range\n");
goto err0;
}
//分配节点空间
new = __node_alloc(s, data);
if (NULL == new)
goto err0;
if (0 == index)
{
new->next = s->p;
s->p = new;
}
else
{
tmp = s->p;
//找到要插入的位置的上一个节点
for (i = 0; i < index - 1; i++)
{
tmp = tmp->next;
}
new->next = tmp->next;
tmp->next = new;
}
return 0;
err0:
return -1;
}
//节点个数
int darr_count(darr_t *s)
{
if (NULL == s)
{
DEBUG("s is NULL\n");
goto err0;
}
return s->count;
err0:
return -1;
}
//通过索引检索值
int darr_retrieve_by_index(darr_t *s, void *data, int index)
{
int i = -1;
node_t *tmp = NULL;
if (NULL == s || NULL == data)
{
DEBUG("some elements are NULL\n");
goto err0;
}
if (index < 0 || index >= s->count)
{
DEBUG("The index is out of range\n");
goto err0;
}
//找到对应索引的节点
tmp = s->p;
for (i = 0; i < index; i++)
{
if (i == s->count)
goto err0;
else
tmp = tmp->next;
}
memcpy(data, tmp->data, s->size);
return 0;
err0:
return -1;
}
//通过关键字检索数据
int darr_retrieve_by_key(darr_t *s, void *data, void *key, cmp_t my_cmp)
{
node_t *tmp = NULL;
if (NULL == s || NULL == data || NULL == key || NULL == my_cmp)
{
DEBUG("some elements are NULL\n");
goto err0;
}
tmp = s->p;
while(NULL != tmp)
{
if (my_cmp(tmp->data, key) == 0)
{
memcpy(data, tmp->data, s->size);
break;
}
//tmp指向下一个节点
tmp = tmp->next;
}
return 0;
err0:
return -1;
}
//通过关键字查找索引
int darr_find_index_by_key(darr_t *s, void *key, cmp_t my_cmp)
{
int i = -1;
node_t *tmp = NULL;
//容错判断
if (NULL == s || NULL == key || NULL == my_cmp)
{
DEBUG("some elements are NULL\n");
goto err0;
}
tmp = s->p;
for (i = 0; i < s->count; i++)
{
if (my_cmp(tmp->data, key) == 0)
break;
//指向下一个节点
tmp = tmp->next;
}
//没有找到的情况
if (i == s->count)
goto err0;
return i;
err0:
return -1;
}
//通过关键字查找所有的索引
darr_t *darr_find_all_index_by_key(darr_t *s, void *key, cmp_t my_cmp)
{
int i = -1;
node_t *tmp = NULL;
darr_t *s1 = NULL;
if (NULL == s || NULL == key || NULL == my_cmp)
{
DEBUG("some elements are NULL\n");
goto err0;
}
s1 = darr_create(sizeof(int), NULL);
if (NULL == s1)
goto err0;
tmp = s->p;
for (i = 0; i < s->count; i++)
{
if (my_cmp(tmp->data, key) == 0)
{
darr_append(s1, &i);
}
tmp = tmp->next;
}
return s1;
err0:
return NULL;
}
//通过索引值修改数据
int darr_modify_by_index(darr_t *s, void *data, int index)
{
int i = -1;
node_t *tmp = NULL;
if (NULL == s || NULL == data)
{
DEBUG("some elements are NULL\n");
goto err0;
}
if (index < 0 || index >= s->count)
{
DEBUG("The index is out of range\n");
goto err0;
}
//找到对应索引的节点
tmp = s->p;
for (i = 0; i < index; i++)
{
tmp = tmp->next;
}
memcpy(tmp->data, data, s->size);
return 0;
err0:
return -1;
}
//通过关键字修改对应的数据
int darr_modify_by_key(darr_t *s, void *data, void *key, cmp_t my_cmp)
{
node_t *tmp = NULL;
if (NULL == s || NULL == data || NULL == key || NULL == my_cmp)
{
DEBUG("some elements are NULL\n");
goto err0;
}
tmp = s->p;
while(NULL != tmp)
{
if (my_cmp(tmp->data, key) == 0)
{
memcpy(tmp->data, data, s->size);
break;
}
//tmp指向下一个节点
tmp = tmp->next;
}
return 0;
err0:
return -1;
}
//通过关键字修改所有的数据
int darr_modify_all_by_key(darr_t *s, void *data, void *key, cmp_t my_cmp)
{
node_t *tmp = NULL;
if (NULL == s || NULL == data || NULL == key || NULL == my_cmp)
{
DEBUG("some elements are NULL\n");
goto err0;
}
tmp = s->p;
while(NULL != tmp)
{
if (my_cmp(tmp->data, key) == 0)
{
memcpy(tmp->data, data, s->size);
}
//tmp指向下一个节点
tmp = tmp->next;
}
return 0;
err0:
return -1;
}
//通过索引删除节点
int darr_delete_by_index(darr_t *s, int index)
{
int i = 0;
node_t *tmp = NULL;
node_t *save = NULL;
if (NULL == s)
{
DEBUG("s is NULL\n");
goto err0;
}
if (index < 0 || index >= s->count)
{
DEBUG("The index is out of range\n");
goto err0;
}
if (0 == index)
{
save = s->p;
s->p = save->next;
}
else
{
//先找到要删除的节点的上一个节点
tmp = s->p;
for (i = 0; i < index - 1; i++)
tmp = tmp->next;
save = tmp->next;
tmp->next = save->next;
}
if (NULL != s->my_destroy)
s->my_destroy(save->data);
free(save->data);
free(save);
s->count --;
return 0;
err0:
return -1;
}
//通过关键字删除节点
int darr_delete_by_key(darr_t *s, void *key, cmp_t my_cmp)
{
int index = -1;
if (NULL == s || NULL == key || NULL == my_cmp)
{
DEBUG("some elements are NULL\n");
goto err0;
}
index = darr_find_index_by_key(s, key, my_cmp);
//通过索引删除节点
darr_delete_by_index(s, index);
return 0;
err0:
return -1;
}
//保存数据
int darr_store(darr_t *s, char *path, op_file_t op_write)
{
int ret = -1;
node_t *tmp = NULL;
FILE *fp = NULL;
//容错判断
if (NULL == s || NULL == path || NULL == op_write)
{
DEBUG("some elements are NULL\n");
goto err0;
}
//打开文件
fp = fopen(path, "w");
if (NULL == fp)
{
DEBUG("fopen failed..\n");
goto err0;
}
//写魔法数字
ret = fwrite(MAGIC, sizeof(char), strlen(MAGIC), fp);
if (ret != strlen(MAGIC))
{
printf("fwrite failed...\n");
goto err0;
}
//写数据的大小
ret = fwrite(&s->size, sizeof(int), 1, fp);
if (ret != 1)
{
printf("fwrite size failed..\n");
goto err1;
}
//写节点的个数
ret = fwrite(&s->count, sizeof(int), 1, fp);
if (ret != 1)
{
printf("fwrite count failed..\n");
goto err1;
}
tmp = s->p;
while(tmp != NULL)
{
//将节点中的数据保存到文件中
op_write(tmp->data, fp);
tmp = tmp->next;
}
fclose(fp);
return 0;
err1:
fclose(fp);
err0:
return -1;
}
//加载数据
int darr_load(darr_t *s, char *path, op_file_t op_read)
{
int ret = -1;
int size;
int count;
int i;
char buf[SIZE];
FILE *fp = NULL;
void *data = NULL;
if (NULL == s || NULL == path || NULL == op_read)
{
DEBUG("some elements are NULL\n");
goto err0;
}
//以只读的方式打开一个文件
fp = fopen(path, "r");
if (NULL == fp)
{
DEBUG("fopen file failed..\n");
goto err0;
}
memset(buf, 0, SIZE);
//读魔法数字
ret = fread(buf, sizeof(char), strlen(MAGIC), fp);
if (ret != strlen(MAGIC))
{
DEBUG("fread failed...\n");
goto err1;
}
if (strcmp(buf, MAGIC) != 0)
{
DEBUG("file is not matched\n");
goto err1;
}
//读取size
ret = fread(&size, sizeof(int), 1, fp);
if (ret != 1)
{
DEBUG("fread size failed...\n");
goto err1;
}
//读取count
ret = fread(&count, sizeof(int), 1, fp);
if (ret != 1)
{
DEBUG("fread count failed..\n");
goto err1;
}
data = malloc(size);
if (NULL == data)
{
DEBUG("malloc data failed..\n");
goto err1;
}
//读取数据
for (i = 0; i < count; i++)
{
memset(data, 0, size);
op_read(data, fp);
//尾插
darr_append(s, data);
}
free(data);
fclose(fp);
return 0;
err1:
fclose(fp);
err0:
return -1;
}
//链表的反转
int darr_reverse(darr_t *s)
{
node_t *tmp = NULL;
node_t *save = NULL;
if (NULL == s)
{
DEBUG("s is NULL\n");
goto err0;
}
tmp = s->p;
s->p = NULL;
while(NULL != tmp)
{
//保存下一个节点
save = tmp->next;
//头插
tmp->next = s->p;
s->p = tmp;
tmp = save;
}
return 0;
err0:
return -1;
}
//通过关键字删除所有的节点
int darr_delete_all_by_key(darr_t *s, void *key, cmp_t my_cmp)
{
int i = -1;
node_t *tmp = NULL;
node_t *save = NULL;
if (NULL == s || NULL == key || NULL == my_cmp)
{
DEBUG("some elements are NULL\n");
goto err0;
}
tmp = s->p;
for (i = 0; i < s->count; i++)
{
save = tmp->next;
if (my_cmp(tmp->data, key) == 0)
{
darr_delete_by_index(s, i);
i--;
}
tmp = save;
}
return 0;
err0:
return -1;
}
//遍历
int darr_traverse(darr_t *s, op_t my_print)
{
node_t *tmp = NULL;
if (NULL == s || NULL == my_print)
{
DEBUG("some elements are NULL\n");
goto err0;
}
//指向第一个节点
tmp = s->p;
while(NULL != tmp)
{
my_print(tmp->data);
//指向下一个节点
tmp = tmp->next;
}
return 0;
err0:
return -1;
}
//销毁
int darr_destroy(darr_t *s)
{
node_t *tmp = NULL;
node_t *save = NULL;
if (NULL == s)
{
DEBUG("s is NULL\n");
goto err0;
}
//指向链表的第一个节点
tmp = s->p;
while(NULL != tmp)
{
//保存下一个节点
save = tmp->next;
if (NULL != s->my_destroy)
s->my_destroy(tmp->data);
free(tmp->data);
free(tmp);
//tmp指向下一个节点
tmp = save;
}
free(s);
return 0;
err0:
return -1;
}
main.c内容
#include "hospital.h"
#define my_scanf(op, format, ...) do{ \
int ret = 0; \
ret = scanf(format, __VA_ARGS__); \
while(getchar() != '\n') \
/*do nothing*/; \
if (ret <= 0) \
op; \
}while(0)
#define my_gets(buf, size) do{ \
memset(buf, 0, size); \
fgets(buf, size, stdin); \
if (buf[strlen(buf) - 1] == '\n') \
buf[strlen(buf) - 1] = '\0'; \
else \
while(getchar() != '\n') \
/*do nothing*/; \
}while(0)
//病人结构体信息
typedef struct _people{
int id;
char name[100];
char sex[100];
int age;
char cases[200];
char drug[20];
int cost;
}people;
//自定义输出函数
int my_print(void *data)
{
people *s = data;
printf("病人编号:%d\n病人姓名:%s\n病人性别:%s\n病人年龄:%d\n病人病例:%s\n使用药物:%s\n病人花费:%d\n\n", s->id, s->name, s->sex, s->age, s->cases, s->drug, s->cost);
return 0;
}
//比较函数
int my_cmp_id(void *data, void *key)
{
return ((people*)data)->id - *(int *)key;
}
int my_cmp_name(void *data, void *key)
{
return strcmp(((people*)data)->name, (char *)key);
}
int op_write(void *data, FILE *fp)
{
int ret = -1;
//写数据
ret = fwrite(data, sizeof(people), 1, fp);
if (ret != 1)
{
printf("fwrite data failed...\n");
goto err0;
}
return 0;
err0:
return -1;
}
int op_read(void *data, FILE *fp)
{
int ret = -1;
//写数据
ret = fread(data, sizeof(people), 1, fp);
if (ret != 1)
{
printf("fwrite data failed...\n");
goto err0;
}
return 0;
err0:
return -1;
}
int main(void)
{
int start = 0;
int start1 = 0;
int return0 = 0;
system("clear");
read(&start1);
start3:
if(start == start1)
{
goto start2;
}
else
{
printf("温馨提示:密码错误3次系统将自毁\n");
printf("请输入密码[0-9]:");
scanf("%d",&start);
if(start == start1)
{
goto start2;
}
return0++;
if(return0 == 3)
{
return 0;
}
goto start3;
}
start2:
return0 = 0;
int l = 1;
int c = 1;
int sx = 1;
int drug1 = 1;
int id;
int cost1;
int x = 1;
char name[100];
int age;
int n;
int index;
int rev = 0;
people s;
darr_t *d = NULL;
darr_t *d1 = NULL;
d = darr_create(sizeof(people), NULL);
if (NULL == d)
{
goto err0;
}
lang:
system("clear");
printf("==================================\n");
if(l == 0)
{
printf("无效输入请重新选择 \n");
}
printf("欢迎来到医院管理系统请进行语言选择\n");
printf("1.中文 \n");
printf("2.Eenglish \n");
printf("请进行语言选择: ");
my_scanf(, "%d", &l);
while(1)
{
retry:
if(l == 1)
{
cshow();
}
else if(l == 2)
{
eshow();
}
else
{
l = 0;
goto lang;
}
printf("请选择功能:");
my_scanf(goto retry, "%d", &n);
int cost = 0;
if (9 == n)
break;
switch(n)
{
case 0:
printf("请设置新的密码[0-9]:");
scanf("%d",&start1);
write(start1);
goto start3;
revise:
case 1:
memset(&s, 0, sizeof s);
system("clear");
printf(" 请输入要添加的病人的病号: ");
my_scanf(, "%d", &id);
system("clear");
printf("请输入要添加的病人的名字: ");
my_scanf(, "%s", &name);
sprintf(s.name, "%s", name);
sex1:
system("clear");
if (sx == 0)
{
system("clear");
printf(" 无效输入请重新选择 \n");
}
printf(" 请输入要添加的病人的性别 \n");
printf("============1.先生============\n");
printf("============2.女士============\n");
printf("病人的性别为: ");
my_scanf(, "%d", &sx);
switch(sx)
{
case 1:
sprintf(s.sex, "%s", "男士");
break;
case 2:
sprintf(s.sex, "%s", "女士");
break;
default:
sx = 0;
goto sex1;
}
system("clear");
printf("请输入要添加的病人的年龄: ");
my_scanf(, "%d", &age);
cases:
system("clear");
if (c == 0)
{
system("clear");
printf("无效输入请重新选择 \n");
}
printf(" 请输入要添加的病人的病例: \n");
printf("===========1.大病=============\n");
printf("===========2.中病=============\n");
printf("===========3.小病=============\n");
printf("===========4.没病=============\n");
printf("病人的病例为: ");
my_scanf(, "%d", &c);
switch(c)
{
case 1:
sprintf(s.cases, "%s", "大病");
break;
case 2:
sprintf(s.cases, "%s", "中病");
break;
case 3:
sprintf(s.cases, "%s", "小病");
break;
case 4:
sprintf(s.cases, "%s", "没病");
break;
default:
c = 0;
goto cases;
}
while(1)
{
drug2:
system("clear");
if (drug1 == -2)
{
system("clear");
printf("无效输入请重新选择 \n");
}
printf(" 请输入病人所需要的药品-1退出 \n");
printf("=========1.一全大补丸=======$100====\n");
printf("=========2.二全大补丸=======$200====\n");
printf("=========3.三全大补丸=======$300====\n");
printf("=========4.四全大补丸=======$400====\n");
printf("=========5.五全大补丸=======$500====\n");
printf("=========6.六全大补丸=======$600====\n");
printf("=========7.七全大补丸=======$700====\n");
printf("=========8.八全大补丸=======$800====\n");
printf("=========9.九全大补丸=======$900====\n");
printf("=========0.十全大补丸=======$1000===\n");
printf("选择的药品为: ");
my_scanf(, "%d", &drug1);
if (drug1 == -1)
break;
switch(drug1)
{
case 0:
sprintf(s.drug, "%s", "十全大补丸");
cost += 1000;
break;
case 1:
sprintf(s.drug, "%s", "一全大补丸");
cost += 100;
break;
case 2:
sprintf(s.drug, "%s", "二全大补丸");
cost += 200;
break;
case 3:
sprintf(s.drug, "%s", "三全大补丸");
cost += 300;
break;
case 4:
sprintf(s.drug, "%s", "四全大补丸");
cost += 400;
break;
case 5:
sprintf(s.drug, "%s", "五全大补丸");
cost += 500;
break;
case 6:
sprintf(s.drug, "%s", "六全大补丸");
cost += 600;
break;
case 7:
sprintf(s.drug, "%s", "七全大补丸");
cost += 700;
break;
case 8:
sprintf(s.drug, "%s", "八全大补丸");
cost += 800;
break;
case 9:
sprintf(s.drug, "%s", "九全大补丸");
cost += 900;
break;
default:
drug1 = -2;
goto drug2;
}
}
s.id = id;
s.age = age;
s.cost = cost;
darr_append(d, &s);
while(1)
{
if(cost1 == -1)
break;
system("clear");
printf("您本次共消费%d元人民币\n", cost);
printf("按-1键退出 ");
my_scanf(, "%d", &cost1);
}
if ( rev == 1)
{
rev = 0;
goto ok;
}
cost1 = 1;
break;
case 2:
while(1)
{
retry1:
printf("请输入所要查询病人的id [-1 quit]: ");
my_scanf(goto retry1, "%d", &id);
//退出
if (-1 == id)
break;
//通过关键字查找索引
index = darr_find_index_by_key(d, &id, my_cmp_id);
//通过索引值检索数据
memset(&s, 0, sizeof s);
darr_retrieve_by_index(d, &s, index);
system("clear");
//输出
my_print(&s);
}
break;
case 3:
while(1)
{
system("clear");
printf("请输入要修改病人的id [-1 quit]: ");
my_scanf(, "%d", &id);
rev = 1;
if ( id == -1)
break;
memset(&s, 0, sizeof s);
darr_delete_by_key(d, &id, my_cmp_id);
goto revise;
}
ok:
break;
case 4:
while(1)
{
memset(&s, 0, sizeof s);
system("clear");
printf("请输入要删除病人的id[-1 quit]: ");
my_scanf(, "%d", &id);
//退出
if (-1 == id)
break;
//通过id删除病人信息
darr_delete_by_key(d, &id, my_cmp_id);
}
break;
case 5:
while(1)
{
if(x == -1)
break;
system("clear");
darr_traverse(d, my_print);
printf("输入-1键退出");
my_scanf(, "%d", &x);
}
x = 1;
break;
case 6:
{
int i = 0;
int count = 0;
while(1)
{
//清屏和定位光标
printf("\033[2J\033[5;0H");
printf("载入病人信息中...\n");
printf("[");
for (i = 0; i < count; i +=5)
{
printf("=");
}
printf(">");
//定位光标
printf("\033[%d;%dH", 6, 22);
printf("] \033[31m%d%%\033[0m\n\n", count);
//循环结束的条件
if (100 == count)
break;
count += 5;
//睡眠0.4秒钟
usleep(400000);
}
system("clear");
printf("载入病人信息成功3s后进入管理系统..\n");
usleep(1000000);
system("clear");
printf("载入病人信息成功2s后进入管理系统..\n");
usleep(1000000);
system("clear");
printf("载入病人信息成功1s后进入管理系统..\n");
usleep(1000000);
}
darr_load(d, "stu.db", op_read);
break;
case 7:
{
int i = 0;
int count = 0;
while(1)
{
//清屏和定位光标
printf("\033[2J\033[5;0H");
printf("保存病人信息中...\n");
printf("[");
for (i = 0; i < count; i +=5)
{
printf("=");
}
printf(">");
//定位光标
printf("\033[%d;%dH", 6, 22);
printf("] \033[31m%d%%\033[0m\n\n", count);
//循环结束的条件
if (100 == count)
break;
count += 5;
usleep(400000);
}
system("clear");
printf("保存病人信息成功3s后进入管理系统..\n");
usleep(1000000);
system("clear");
printf("保存病人信息成功2s后进入管理系统..\n");
usleep(1000000);
system("clear");
printf("保存病人信息成功1s后进入管理系统..\n");
usleep(1000000);
}
darr_store(d, "stu.db", op_write);
break;
case 8:
goto lang;
}
}
return 0;
err0:
return 1;
}
int cshow(void)
{
system("clear");
printf(" \n");
printf("============================== \n");
printf("|| 医院管理系统 ||\n");
printf("|| 0.设置密码 ||\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("|| 9.退出系统 ||\n");
printf("============================== \n");
printf(" \n");
}
int eshow(void)
{
system("clear");
printf(" \n");
printf("==================================\n");
printf("|| hospital management system ||\n");
printf("|| 0.set up ||\n");
printf("|| 1.register ||\n");
printf("|| 2.inquiry ||\n");
printf("|| 3.modify patient information ||\n");
printf("|| 4.delete patient information ||\n");
printf("|| 5.list ||\n");
printf("|| 6.load ||\n");
printf("|| 7.save ||\n");
printf("|| 8.language ||\n");
printf("|| 9.exit ||\n");
printf("==================================\n");
printf(" \n");
}
int write(int i)
{
int ret = -1;
FILE *fp = NULL;
//以写的方式打开一个文件
fp = fopen("password", "w");
if (NULL == fp)
{
printf("fopen failed...\n");
goto err0;
}
ret = fwrite(&i, sizeof(int), 1, fp);
if (ret <= 0)
{
printf("fwrite failed...\n");
}
//关闭文件
fclose(fp);
return 0;
err0:
return -1;
}
int read(int *i)
{
int ret;
FILE *fp = NULL;
//以只读的方式打开一个文件
fp = fopen("password", "r");
if (NULL == fp)
{
printf("fopen failed..\n");
goto err0;
}
ret = fread(i, sizeof(int), 1, fp);
if (ret <= 0)
{
printf("fread failed...\n");
}
//关闭文件
fclose(fp);
return 0;
err0:
return -1;
}