通讯管理系统,在我运行之后,如图所示输入之后,Save函数似乎没有起到作用,我看了文本文件,里面还是没有内容,而且在Save函数下面的一条语句也没有输出(返回主菜单),请问这是怎么回事?我试着在Save函数中,关闭文件后面加了一句输出语句,发现也没有执行。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef int ElemType;
typedef struct {
char name[10]; //姓名
char road[10]; //街道
char city[10]; //城市
char code[10]; //邮编
char country[10]; //国家
}person;
typedef struct node {
person data; //数据域
struct node* prior; //前驱
struct node* next; //后继
}ListNode, * LinkList;
LinkList InitList(); //构造一个空的线性表
LinkList Create(LinkList head); //创建线性表
void Enter(LinkList head); //输入通讯录信息
void Save(LinkList head); //将信息存入文件
LinkList InitList()
{
LinkList head = (LinkList)malloc(sizeof(ListNode)); //创建头节点
if (head == NULL)
{
printf("\n建立链表失败!\n");
exit(-1); //退出程序
}
head->next = NULL;
head->prior = NULL;
return head;
}
LinkList Create(LinkList head)
{
person LM; //定义一个person类型的数据LM /////////
LinkList rear; /////////
rear = head; /////////
FILE* fp = fopen("C:\\Users\\Lenovo\\Desktop\\学生信息.txt", "r"); //以文本只读打开文件
if (fp == NULL)
{
printf("\n文件打开失败!\n");
return NULL;
}
while (fscanf(fp, "%s%s%s%s%s", LM.name, LM.road, LM.city, LM.code, LM.country) != EOF) //从文件读入,处理到文件尾
{
LinkList s = (LinkList)malloc(sizeof(ListNode));
s->data = LM;
s->prior = NULL;
s->next = NULL;
rear->next = s;
s->prior = rear;
rear = rear->next;
}
fclose(fp);
return head;
}
void Save(LinkList head)
{
LinkList rear;
person LM;
rear=head->next;//跳过头节点
FILE *fp;
int i;
if((fp=fopen("C:\\Users\\Lenovo\\Desktop\\学生信息.txt","wb"))==NULL)/*只打开或建立一个二进制文件,只允许写数据*/
{
printf("\n文件不存在!\n");
}
while(rear)//处理到文件尾
{
LM=rear->data;
fprintf(fp, "%s\t%s\t%s\t%s\t%s\n", LM.name, LM.road, LM.city, LM.code, LM.country);
rear=rear->next;
}
fclose(fp);
}
void Menu(LinkList head) //输出菜单
{
int n;
int flag=0;
do{
printf("-----------------------------------------------------\n");
printf("---------------->>通讯管理系统<<---------------------\n");
printf("--------------------->>主菜单<<----------------------\n");
printf("-----------------------------------------------------\n");
printf("* 1、输入联系人信息 * 2、显示联系人信息 *\n");
printf("-----------------------------------------------------\n");
printf("* 3、查找联系人信息 * 4、删除联系人信息 *\n");
printf("-----------------------------------------------------\n");
printf("* 5、存盘 * 6、装入 *\n");
printf("-----------------------------------------------------\n");
printf("* 7、退出系统 * *\n");
printf("-----------------------------------------------------\n");
printf("\n请输入菜单编号:\n");
scanf("%d",&n);
if(n<1||n>7)
{
system("cls");
printf("选择错误! 请重新选择!\n");
system("pause");
flag=1;
}
else
{
break;
}
}while(flag=1);
switch (n)
{
case 1:Enter(head); break;
// case 2:Display(head); break;
// case 3:Search(head); break;
// case 4:Delete(head); break;
case 5:Save(head); break;
// case 6:Load(head); break;
// case 7:Quit(head);break;
default:printf("输入有误!");
}
}
void Enter(LinkList head) //输入
{
person LM;
char c;
LinkList p = head;
printf("姓名 街道 城市 邮编 国家\n");
scanf("%s", LM.name);
scanf("%s", LM.road);
scanf("%s", LM.city);
scanf("%s", LM.code);
scanf("%s", LM.country);
LinkList s = (LinkList)malloc(sizeof(ListNode));
s->data = LM;
s->next = p->next;
s->next->prior = s;
s->prior = p;
while (p->next)
{
p = p->next;
}
p->next = s;
Save(head); //调用存盘函数
printf("\n返回主菜单!\n");
system("pause");
Menu(head);
}
int main()
{
LinkList head = InitList();
head = Create(head);
Menu(head);
return 0;
}