m0_65997969 2022-01-04 11:41 采纳率: 0%
浏览 13
已结题

我这个快递管理系统修改和删除有问题,无法进行修改和单个删除,怎么解决

include <stdio.h>
#include <stdlib.h>//用system函数为清除屏幕命令。
#include <string.h>
#include <math.h>
struct _PACKAGE
{
char no[10];//快递单号
char name[20];//收货人
char tel[20];//收货人号码
char add[40];//收货人地址
char cate[10];//运单种类
char com[10];//承运公司
char time[20];//到达时间
struct _PACKAGE next;
};
FILE fp;
struct _PACKAGE
p1,
p2,* head;
void creat()
{
FILE *fp;
int a;
struct _PACKAGE *s,*head,*tail;
head=NULL;
tail=NULL;
system("cls");
if((fp=fopen("E:\程序\快递包裹管理系统作业\record.txt","a"))==NULL)
{
printf("打开文件失败");
}

do
{
s=(struct _PACKAGE  *)malloc(sizeof(struct _PACKAGE));//开辟新链表
//fread(s,sizeof(struct _PACKAGE),1,fp);
printf("快递单号:");
scanf("%s",&s->no);
printf("\n收货人:");
scanf("%s",s->name);
printf("\n收货人号码:");
scanf("%s",s->tel);
printf("\n收货人地址:");
scanf("%s",s->add);
printf("\n运单种类:");
scanf("%s",s->cate);
printf("\n乘运公司:");
scanf("%s",s->com);
printf("\n到达时间:");
scanf("%s",s->time);
if(head==NULL) head=s;
else tail->next=s;
tail=s;
fwrite(s,sizeof(struct _PACKAGE ),1,fp);
//fprintf(fp,"%d\t%s\t%s\t\t%s\t\t%s\t%s\t%s\n",s->no,s->name,s->tel,s->add,s->cate,s->com,s->time);
printf("继续请输入任意非零数字||退出请输入0\n");
scanf("%d",&a);
system("cls");
}while(a!=0);
fclose(fp);

}

typedef struct _USER
{
char id[20];//账号
char code[20];//密码
}USER;
USER user[100];
int user_num=0;
/加载文件/
void Open_User()
{
FILE* fp=fopen("E:\程序\快递包裹管理系统作业\user.txt","r+");
if(fp==NULL)
{
user_num=0;
return ;
}
while(fread(&user[user_num],sizeof(USER),1,fp))
{
user_num++;
}
fclose(fp);
}
/保存到文件/
void Save_User()
{
int i;
FILE* fp=fopen("E:\程序\快递包裹管理系统作业\user.txt","w+");
if(fp==NULL)
{
return ;
}
for(i=0;i<user_num;i++)
{
fwrite(&user[i],sizeof(USER),1,fp);
}
fclose(fp);
}
/*登陆界面*/
int Main_Menu()
{
int chioce;
printf("1:登录\n");
printf("2:注册\n");
printf("0:退出\n");
printf("请输入选择:");
scanf("%d",&chioce);
while(chioce<0||chioce>2)
{
printf("选择错误,重新输入:");
scanf("%d",&chioce);
}
return chioce;
}
/修改登录密码/
void Modify(int who)
{
USER temp;
char chioce[20];
strcmp(temp.id,user[who].id);
system("cls");
printf("请输入新登录密码:");
scanf("%s",temp.code);
printf("确认修改?(Y/N):");
scanf("%s",chioce);
if(!strcmp(chioce,"Y")||!strcmp(chioce,"y"))
{
user[who]=temp;
printf("修改成功!\n");
}
else
{
printf("已取消修改!\n");
}
system("cls");
}
/登录账号/
int Reg()
{
int i;
system("cls");
printf("请输入登录账号:");
scanf("%s",user[user_num].id);
printf("请输入登录密码:");
scanf("%s",user[user_num].code);
for(i=0;i<user_num;i++)
{
if(!strcmp(user[i].id,user[user_num].id))
{
printf("登陆成功!\n");
return i;
}
}
printf("登陆失败!账号或密码错误!\n");
return -1;
}
/*注册账号*/
void Login()
{
int i;
system("cls");
printf("请输入申请账号:");
scanf("%s",user[user_num].id);
for(i=0;i<user_num;i++)
{
if(!strcmp(user[i].id,user[user_num].id))
{
printf("账号重复,注册失败!");
return ;
}
}
printf("请输入登录密码:");
scanf("%s",user[user_num].code);
printf("注册成功!\n");
user_num++;
}
/*管理员登陆*/
int fun()
{
char charge_id[] = "12345";
char charge_code[20]="0";
printf("请输入密码->");
scanf("%s", &charge_code);
if (strcmp(charge_code,charge_id)==0)
{
printf("登陆成功\n");
return 1;
}
else
{
printf("密码错误\n");
return -1;
}
}

/初始界面/
int Main_XUZE()
{
int select;
system("cls");
printf("1:管理员\n");
printf("2:用户\n");
printf("0:退出\n");
printf("请输入选择:");
scanf("%d",&select);
while(select<0||select>2)
{
printf("选择错误,重新输入:");
scanf("%d",&select);
}
return select;
}
/用户登录/
int USER_ST()
{
int chioce1,flag;
Open_User();
do
{
flag=-1;//标志
chioce1=Main_Menu();
switch(chioce1)
{
case 1:
flag=Reg();//登录
break;
case 2:
Login();//注册
break;
}
if(flag !=-1 )//说明登录成功
{
system("cls");
printf("欢迎来到快递包裹管理系统");
system("pause");
inquire();
break;
}
}while(chioce1!=0);
Save_User();
return 0;
}

void interface()
{
int i;
do
{
system("cls");
printf("\t\t 欢迎使用快递包裹管理系统***\n");
printf("\t\t * *\n");
printf("\t\t * 1:录入数据 *\n");
printf("\t\t * *\n");
printf("\t\t * 2:修改数据 *\n");
printf("\t\t * *\n");
printf("\t\t * 3:删除数据 *\n");
printf("\t\t * *\n");
printf("\t\t * 4:查找 *\n");
printf("\t\t * *\n");
printf("\t\t * 5:显示所有信息 *\n");
printf("\t\t * *\n");
printf("\t\t * 0:退出 *\n");
printf("\t\t * *\n");
printf("\t\t ***********************************************\n");
printf("\t 请选择所要进行的操作(0-5):");
scanf("%d",&i);
printf("\n");
switch(i)
{
case 1:creat();break;
case 2:EditRecord();break;
case 3:delmax();break;
case 4:inquire();break;
case 5: Print();break;
default:printf("选择有误.\n");break;
}
}while(i);
}
/显示包裹信息页面/
int Print()
{

system("cls");
if ((fp=fopen("E:\\程序\\快递包裹管理系统作业\\record.txt","rb"))==NULL)
{
    printf("不能打开文件,按任意键退出......\n");
    system("pause");
}

printf("单号 | 收货人 |收货人号码|收货人地址|运单种类|  承运公司   |    到达时间\n");
printf("------------------------------------------------------------------------\n");
p1=(struct _PACKAGE  *)malloc(sizeof(struct _PACKAGE));
do
{
    if(fread(p1,sizeof(struct  _PACKAGE),1,fp)!=1)
    {
        if(feof(fp))
        {
         printf("输出结束!");
        system("pause");
         break;
        }
    }
    printf("%s%10s%10s%10s%15s%10s%10s\n",p1->no,p1->name,p1->tel,p1->add,p1->cate,p1->com,p1->time);
}while(1);
fclose(fp);
return 0;

}
/查询界面/
int inquire()
{ FILE *fp=fopen("E:\程序\快递包裹管理系统作业\record.txt","r");
char number[10]={'0'},again[10]={'0'};
char name1[10]={'0'};
int i;
struct _PACKAGE *p;
p=(struct _PACKAGE *)malloc(sizeof(struct _PACKAGE));
system("cls");
if(fp==NULL)
{ printf("没有快递信息!");
return 0;}
printf("\n------------------------\n");
start:printf("1:使用快递单号查询\n");
printf("2:使用收货人姓名查询\n");
printf("3:退出\n");
scanf("%d",&i);
if(i==1)
{ printf("请输入需要查询的包裹单号:\n");
scanf("%s",number);
fseek(fp,0,0);
while(fscanf(fp,"%s",p->no)!=EOF)
{if(strcmp(number,p->no)==0)
{
printf("单号为%s的包裹已入库:\n",number);
printf("该包裹的信息为:\n");
printf("收货人姓名:%s\n",p->name);
printf("收货人号码:%s\n",p->tel);
printf("收货人地址:%s\n",p->add);
printf("运单种类:%s\n",p->cate);
printf("承运公司:%s\n",p->com);
printf("到达时间:%s\n",p->time);
}
else
printf("抱歉,您所查询的包裹不存在,请确认单号是否正确!");
printf("是否需要再次查询?\n");
scanf("%s",again);
if(strcmp(again,"是")==0||strcmp(again,"需要")==0)
goto start;
else
printf("查询结束");
printf("------------------------");
fclose(fp);
}
}
if(i==2)
{
printf("请输入收货人姓名:\n");
scanf("%s",name1);
fseek(fp,0,0);
while(fscanf(fp,"%s",p->name)!=EOF)
{ if(strcmp(name1,p->name)==0)
{ printf("该包裹的信息为:\n");
printf("收货人姓名:%s\n",p->name);
printf("收货人号码:%s\n",p->tel);
printf("快递单号:%s\n",p->no);
printf("收货人地址:%s\n",p->add);
printf("运单种类:%s\n",p->cate);
printf("承运公司:%s\n",p->com);
printf("到达时间:%s\n",p->time);
}

      else 
          printf("抱歉,您所查询的包裹不存在,请确认姓名是否正确!");
         printf("\n是否需要再次查询?\n");
 scanf("%s",again);
 if(strcmp(again,"是")==0||strcmp(again,"需要")==0)
     goto start;
 else
     printf("查询结束\n");
     printf("------------------------");
     fclose(fp);

}
}
if(i==3)
{ return;
}
return;
}
/删除界面/
void getnum()
{
char no[15];
int a=0;
struct _PACKAGE *p1=NULL,*p2,*head=NULL,*q;
if((fp=fopen("E:\程序\快递包裹管理系统作业\record.txt","wb"))==NULL)
{
printf("文件打开错误\n");
return ;
}
p2=p1;
printf("请输入快递单号:");
scanf("%s",no);
while(p1!=NULL)
{
if(strcmp(p1->no,no)==0)
{
q=p1;
head=q->next;
p1=p2=q->next;
continue;
}
else
{
p2->next=p1->next;
q=p1;
p1=p1->next;
continue;
}
p2=p1;
p1=p2->next;
}
p1=p2=head;
while(p1!=NULL)
{
if(fwrite(p1,sizeof(struct _PACKAGE),1,fp)!=1)
{
printf("输入错误\n");break;
}
p1=p1->next;
}
fclose(fp);
}
void getname()
{
FILE *fp;
char b[20];
struct _PACKAGE *p1,*p2,*head,*q;
if((fp=fopen("E:\程序\快递包裹管理系统作业\record.txt","wb"))==NULL)
{
printf("文件打开错误\n");
return ;
}
//p2=p1;
printf("请输入收货人名字:");
scanf("%s",b);
while(p1!=NULL)
{
if(strcmp(p1->name,b)==0)
{
q=p1;
head=q->next;
p1=p2=q->next;
continue;
}
else
{
p2->next=p1->next;
q=p1;
p1=p1->next;
continue;
}
p2=p1;
p1=p2->next;
}
p1=p2=head;
while(p1!=NULL)
{
if(fwrite(p1,sizeof(struct _PACKAGE),1,fp)!=1)
{
printf("输入错误\n");break;
}
p1=p1->next;
}
fclose(fp);
}

int delmax()
{
int i;
CreatLinkTa();
while(1)
{
system("cls");
printf("**********************************\n");
printf("\t
1.按快递单号删除\n");
printf("\t
*2.按收货人名字删除\n");
printf("\t
3.退出\n");
printf("***************************************\n");
printf("请输入:");
scanf("%d",&i);
switch(i)
{
case 1:getnum();break;
case 2:getname();break;
case 3:return 0;
default:break;
}
}
return 0;
}

int CreatLinkTa()
{
char n=0;
system("cls");
if((fp=fopen("E:\程序\快递包裹管理系统作业\record.txt","rb"))==NULL)
{
printf("打开文件错误,按任意键退出......");
system("pause");
return;
}
do
{
p1=( struct _PACKAGE )malloc(sizeof(struct _PACKAGE ));
//p2=p1;
if((fread(p1,sizeof(struct _PACKAGE),1,fp)!=1)&&(feof(fp)))
{
printf("文件读入结束!按任意键退出......\n");
system("pause");
break;
}
n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
}while(!feof(fp));
p1->next=NULL;
p1=head;
fclose(fp);
printf("链表产生完毕\n");
system("pause");
p1=p2=head;
printf("链表显示完毕,按任意键继续……\n");
return;
}
/修改记录
/
void creatt(struct _PACKAGE* s)
{
printf("快递单号:");
scanf("%s",&s->no);
printf("\n收货人:");
scanf("%s",s->name);
printf("\n收货人号码:");
scanf("%s",s->tel);
printf("\n收货人地址:");
scanf("%s",s->add);
printf("\n运单种类:");
scanf("%s",s->cate);
printf("\n乘运公司:");
scanf("%s",s->com);
printf("\n到达时间:");
scanf("%s",s->time);
}
void XIUGAI()
{
char num[10];
int n=0;
struct _PACKAGE *q;
p2=p1;
printf("\n请输入快递单号:");
scanf("%s",num);
while(p1!=NULL)
{ n++;
if(stricmp(p1->no,num)==0)
{
printf("快递单号\t收货人\t收货人号码\t收货人地址\t运单种类\t承运公司\t到达时间\n");
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",p1->no,p1->name,p1->tel,p1->add,p1->cate,p1->com,p1->time);
printf("按任意键进入修改模式......\n");
system("pause");
q=( struct _PACKAGE *)malloc(sizeof(struct _PACKAGE ));
creatt(q);//
q->next=NULL;
if(n==1){head=p2=q;q->next=p1->next;p1=q;}
else {q->next=p1->next;p2->next=q;p1=q;}
}
p2=p1;
p1=p1->next;
} //while end
printf("按任意键进入修改结束......\n");
system("pause");
p1=p2=head;
if((fp=fopen("E:\程序\快递包裹管理系统作业\record.txt","wb"))==NULL)
{
printf("打开文件错误,按任意键退出....\n");
system("pause");
return;
}

while(p1!=NULL)
{
    if(fwrite(p1,sizeof(struct  _PACKAGE),1,fp)!=1)
    {
        printf("写入错误!按任意键退出......\n");
        system("pause");

;
break;
}
p1=p1->next;
}
printf("修改结束!按任意键退出......\n");
system("pause");
fclose(fp);
}

void EdReNam()
{
char str[10];
int n=0;
struct _PACKAGE *q;
p2=p1;
printf("\n请输入姓名:");
scanf("%s",str);
while(p1!=NULL)
{ n++;
if(strcmp(p1->name,str)==0)
{
printf("快递单号\t收货人\t收货人号码\t收货人地址\t运单种类\t承运公司\t到达时间\n");
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",p1->no,p1->name,p1->tel,p1->add,p1->cate,p1->com,p1->time);
printf("按任意键进入修改模式......\n");
system("pause");
q=( struct _PACKAGE *)malloc(sizeof(struct _PACKAGE ));
creatt(q); //
q->next=NULL;
if(n==1){head=p2=q;q->next=p1->next;p1=q;}
else {q->next=p1->next;p2->next=q;p1=q;}
}
p2=p1;
p1=p1->next;
} //while end
printf("按任意键开始修改......\n");
system("pause");
p1=p2=head;
if((fp=fopen("E:\程序\快递包裹管理系统作业\record.txt","wb"))==NULL)
{
printf("打开文件错误,按任意键退出....\n");
system("pause");
return;
}

while(p1!=NULL)
{
    if(fwrite(p1,sizeof(struct   _PACKAGE),1,fp)!=1)
    {
        printf("写入错误!按任意键退出......\n");
       system("pause");
        break;
    }
    p1=p1->next;
}
printf("修改结束!按任意键退出......\n");
 system("pause");
fclose(fp);

}
int EditRecord()
{
int i;
CreatLinkTa(); //生成链表,head、p1指向表头
while(1)
{
system("cls");
printf("\t\t欢 迎 使 用 本 修 改 模 块\n");
printf("\t\t* \n");
printf("\t\t
1:按职运单号修改 \n");
printf("\t\t
\n");
printf("\t\t
2:按姓名修改 \n");
printf("\t\t
\n");
printf("\t\t
0:退出 \n");
printf("\t\t
*\n");
printf("\t\t
****************
**********************************\n");
printf("\t\t 请选择所要进行的操作(0-2):");
scanf("%d",&i);
printf("\n");
switch(i)
{
case 0: return;
case 1:{XIUGAI();break;}
case 2:{ EdReNam();break;}
default:break;
}

}
return;
}
int main()
{
int select1,flag1;
do
{ flag1=-1;
select1=Main_XUZE();
switch(select1)
{
case 0:
printf("退出系统");
break;
case 1:
flag1=fun();
break;
case 2:
USER_ST();
break;
}
if(flag1!=-1)//管理员进入成功
{ system("cls");
interface();
system("pause");
break;
}
}while(select1!=0);
return 0;
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 1月12日
    • 创建了问题 1月4日

    悬赏问题

    • ¥15 请问Quartus的Verilog代码怎么写?
    • ¥18 光催化第一性原理计算析氢效率STH怎么计算
    • ¥100 Mac 版foxmail 收邮件问题
    • ¥15 QWebEngineView
    • ¥15 如何使用shufflenet进行手写数字识别
    • ¥15 .net core 同时编辑怎么防止数据串了
    • ¥20 微信小程序播放直播流
    • ¥15 关于迷宫自走单片机循迹小车的知识
    • ¥15 python使用selenium工具爬取网站的问题
    • ¥15 visual studio中c语言用ODBC链接SQL SERVER