简单的用C语言实现的管理程序,删除某一行数据导致错误

这是个数据管理程序

里面Delete函数在编辑没经过creat函数处理的文本文档时正常工作

但是文本文档一经过creat函数处理,Delete函数无法正常工作

希望知道怎么改正的大佬帮个忙,说明下
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#define LEN sizeof(struct People)
struct People
{
long num;
char name[10];
char mname[10];
int sl;
struct People next;
};
int n;
int menu(){
char n;
do
{
system(“cls”);
printf("\t\t\t
**************************************************\n");
printf("\t\t\t* \n");
printf("\t\t\t
请选择项目 \n");
printf("\t\t\t
\n");
printf("\t\t\t
1.购买人管理 \n");
printf("\t\t\t
2.采购管理 \n");
printf("\t\t\t
3.出入库查询 \n");
printf("\t\t\t
4.退出 \n");
printf("\t\t\t
**************************************************\n");
printf(“请选择1-4:”);
n=getch();
}while(n<‘1’|| n>‘4’);
return (n-48);
}
int menu1(){
char n;
do
{
system(“cls”);
printf("\t\t\t***************************************************\n");
printf("\t\t\t* \n");
printf("\t\t\t
购买人管理 \n");
printf("\t\t\t
\n");
printf("\t\t\t
1.添加信息 \n");
printf("\t\t\t
2.删除信息 \n");
printf("\t\t\t
3.查询信息 \n");
printf("\t\t\t
\n");
printf("\t\t\t
**************************************************\n");
printf(“请选择1-3:”);
n=getch();
}while(n<‘1’|| n>‘3’);
return (n-48);
}
int menu2(){
char n;
do
{
system(“cls”);
printf("\t\t\t***************************************************\n");
printf("\t\t\t* \n");
printf("\t\t\t
采购管理 \n");
printf("\t\t\t
\n");
printf("\t\t\t
1.添加信息 \n");
printf("\t\t\t
2.删除信息 \n");
printf("\t\t\t
3.查询信息 \n");
printf("\t\t\t
\n");
printf("\t\t\t
**************************************************\n");
printf(“请选择1-3:”);
n=getch();
}while(n<‘1’|| n>‘3’);
return (n-48);
}
int begin(){
system(“color a”);
system(“title 医保及药物管理系统”);
printf("\t\t\t***************************************************\n");
printf("\t\t\t* \n");
printf("\t\t\t
欢迎使用药物购买人及采购管理系统 \n");
printf("\t\t\t
\n");
printf("\t\t\t
\n");
printf("\t\t\t
\n");
printf("\t\t\t
\n");
printf("\t\t\t
**************************************************\n");
printf("\t\t\t\t\t按任意键继续!\n");
getch();
}
int end(){
system(“cls”);
printf("\t\t\t***************************************************\n");
printf("\t\t\t* \n");
printf("\t\t\t
感谢使用药物购买人及采购管理系统 \n");
printf("\t\t\t
\n");
printf("\t\t\t
再见 \n");
printf("\t\t\t
\n");
printf("\t\t\t
\n");
printf("\t\t\t
**************************************************\n");
}
struct People *creat(void)
{
struct People *head;
struct People *p1,p2;
n=0;
p1=p2=(struct People )malloc(LEN);
scanf("%ld %s %s %d",&p1->num,&p1->name,&p1->mname,&p1->sl);
head=NULL;
while(p1->num!=0)
{
n++;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct People )malloc(LEN);
scanf("%ld,%s,%s,%d",&p1->num,&p1->name,&p1->mname,&p1->sl);
}
p2->next=NULL;
return(head);
}
void Delete(const char
filepath, int n){
char buf[4096];
FILE
fp = fopen(filepath, “r”);
FILE
fpt = fopen(“temp.txt”, “w”);
int i = 0;
while(!feof(fp))
{
i++;
if (i == n)
{
fgets(buf,sizeof(buf), fp);
}
else{
fgets(buf, sizeof(buf), fp);
fprintf(fpt, “%s”, buf);
}
}
fclose(fp);
fclose(fpt);
fpt = fopen(“temp.txt”, “r”);
fp = fopen(filepath, “wb”);
fclose(fp);
fp = fopen(filepath, “a”);
while(!feof(fpt))
{
fgets(buf, sizeof(buf), fpt);
fprintf(fp, “%s”, buf);
}
fclose(fp);
fclose(fpt); //
system(“ERASE temp.txt”);
}
//主函数开始
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int a=1;
int i;
int n1=0;
int n2=0;
int del;
struct people *head;
struct medicine *pot;
int flag1,flag2;
begin();
while(a)
{
switch(menu())
{
case 1:
switch(flag1=menu1())
{
case 1:
system(“cls”);
FILE *fp;
fp=fopen(“d:\c\f1.txt”,“a”);
struct People *pt;
printf("\t\t\t请输入购买人编号,名字,药品,数量中间用回车隔开\n\t\t\t\t添加结束输入0\n\t\t\t\t一次一条\n");
pt=creat();
do{
fprintf(fp,“编号:%ld 名字:%s 药品:%s 数量:%d\n”,pt->num,pt->name,pt->mname,pt->sl);
FILE *fp2;
fp2=fopen(“d:\c\f3.txt”,“a”);
fprintf(fp2,“出库:%s 数量:%d\n”,pt->mname,pt->sl);
pt=pt->next;
n1++;
}while(pt!=NULL);
printf(“添加成功,返回最初界面,请稍后”);
Sleep(3000);
大佬 fclose(fp);
break;
case 2:
system(“cls”);
printf("\t\t\t请输入需要删除信息的编号\n");
scanf("%d",&del);
Delete(“d:/c/f1.txt”,del);
printf(“删除成功,返回最初界面,请稍后”);
Sleep(3000);
break;
case 3:
system(“cls”);
FILE *fp3;
char ch;
fp3=fopen(“D:\c\f1.txt”,“r”);
if(fp3NULL)printf(“can not open!\n”);
else{
fscanf(fp3,"%c",&ch);o
while(!feof(fp3))
{
putchar(ch);
fscanf(fp3,"%c",&ch);
}
fclose(fp3);
}
printf("\n");
printf("\t\t\t\t\t按任意键返回主菜单!\n");
getch();
break;
}
end();
break; //购买人数据处理
case 2:
switch(flag1=menu1())
{
caase 1:
system(“cls”);
FILE *fp;
fp=fopen(“d:\c\f2.txt”,“a”);
struct People *pt;
printf("\t\t\t请输入供应商编号,名字,药品,数量中间用回车隔开\n\t\t\t\t添加结束输入0\n\t\t\t\t一次一条\n");
pt=creat();
do{
fprintf(fp,“编号:%ld 名字:%s 药品:%s 数量:%d\n”,pt->num,pt->name,pt->mname,pt->sl);
FILE *fp2;
fp2=fopen(“d:\c\f3.txt”,“a”);
'l fprintf(fp2,“入库:%s 数量:%d\n”,pt->mname,pt->sl);
pt=pt->next;
n1++;
}while(pt!=NULL);
printf(“添加成功,返回最初界面,请稍后”);
Sleep(3000);
fclose(fp);
break;
case 2:
system(“cls”);
printf("\t\t\t请输入需要删除信息的编号\n");
scanf("%d",&del);
Delete(“d:/c/f2.txt”,del);
printf(“添加成功,返回最初界面,请稍后”);
Sleep(3000);
a break;
case 3:
system(“cls”);
FILE *fp3;
char ch;
fp3=fopen(“D:\c\f2.txt”,“r”);
if(fp3
NULL)printf(“can not open!\n”);
else{
fscanf(fp3,"%c",&ch);
while(!feof(fp3))
{
putchar(ch);
fscanf(fp3,"%c",&ch);
}
fclose(fp3);
d}
printf("\n");
printf("\t\t\t\t\t按任意键返回主菜单!\n");
getch();
break;
}
end();
break;
case 3:
system(“cls”);
FILE *fp4;
char ch;
fp4=fopen(“D:\c\f3.txt”,“r”);
if(fp4==NULL)printf(“can not open!\n”);
else{
fscanf(fp4,"%c",&ch);
while(!feof(fp4))
{
putchar(ch);
fscanf(fp4,"%c",&ch);
}
fclose(fp4);
}
printf("\n");
printf("\t\t\t\t\t按任意键返回主菜单!\n");
getch();
break;
case 4:
a=0;
end();
break; //药物数据处理
}
}
}
这是个数据管理程序
里面Delete函数在编辑没经过creat函数处理的文本文档时正常工作
但是文本文档一经过creat函数处理,Delete函数无法正常工作
希望知道怎么改正的大佬帮个忙,说明下

用了creat后

简单的用C语言实现的管理程序,删除某一行数据导致错误简单的用C语言实现的管理程序,删除某一行数据导致错误

单独使用时

简单的用C语言实现的管理程序,删除某一行数据导致错误

简单的用C语言实现的管理程序,删除某一行数据导致错误