#include <stdio.h>
#include <string.h>
#include<stdlib.h>
struct kdxx
{
char sjr[10];//收件人
char sphone[16];//收件人联系电话
char sdz[99];//收件人地址
char jjr[20];//寄件人
char jphone[16];//寄件人联系电话
char jdz[99];//寄件人地址
int bh;//快递编号
char gs[10];//快递公司
int zf;//资费
char fjxx[99];//附加信息
}kd[99];
void menu();
void Input();
void browse();
void Delete();
void modify();
void Findbh();
void Findsphone();
int n=0;
int main()
{
int select;
while (true)
{
menu();
scanf("%d",&select);
switch(select)
{
case 1:Input();break;
case 2:browse();break;
case 3:Findsphone();break;
case 4:Findbh();break;
case 5:Delete();break;
case 6:modify();break;
case 0:exit(0);break;
}
}
menu();
Input();
browse();
Delete();
modify();
Findbh();
Findsphone();
return 0;
}
//---------------------------------------------------------------------------------------------------------
void menu()
{
printf("\n");
printf("\n");
printf(" ******************快递信息管理****************\n");
printf(" 1.快递信息录入\n");
printf(" 2.浏览快递信息\n");
printf(" 3.收件人电话查询快递信息\n");
printf(" 4.快递编号查询快递信息\n");
printf(" 5.删除快递信息\n");
printf(" 6.修改快递信息\n");
printf(" 0.退出\n");
printf(" **********************************************\n");
printf("\n");
}
//------------------------------------------------------------------------------------------------------
void Input()
{
FILE*fp;//文件的创建
if((fp=fopen("kuaidi.txt","a+"))==NULL){
printf("文件错误");
return;
}
while (!feof(fp)){//检查fp是否结束
fread(&kd[n],sizeof(struct kdxx),1,fp);//从fp里面读取一个kdxx长度复制到kd【n】里
n++;
}
printf("请输入收件人:");
scanf("%s",kd[n].sjr);
printf("请输入收件人联系电话:");
scanf("%s",kd[n].sphone);
printf("请输入收件人地址:");
scanf("%s",kd[n].sdz);
printf("请输入寄件人:");
scanf("%s",kd[n].jjr);
printf("请输入寄件人联系电话:");
scanf("%s",kd[n].jphone) ;
printf("请输入寄件人地址:");
scanf("%s",kd[n].jdz);
printf("请输入快递编号:");
scanf("%d",&kd[n].bh);
printf("请输入快递公司:");
scanf("%s",kd[n].gs) ;
printf("请输入资费:");
scanf("%d",&kd[n].zf);
printf("请输入附加信息:");
scanf("%s",kd[n].fjxx);
printf("录入完成");
fwrite(&kd[n],sizeof(struct kdxx),1,fp);//新录入员工写入以及大小
fclose(fp);
}
//-----------------------------------------------------------------------------------
void browse()
{
FILE *fp;
int n=0;
if((fp=fopen("kuaidi.txt","r"))==NULL){
printf("文件错误");
return;
}
while (!feof(fp))
{
if((fread(&kd[n],sizeof(struct kdxx),1,fp)))
n++;
}
printf("\n快递编号收件人\t 收件人联系电话\t 收件人地址\t 件人姓名\t 寄件人联系电话\t 寄件人地址\t 快递公司\t 资费\t 附加信息\n");
for (int i=0;i<n;i++){
printf("\n%d\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %d\t %s\n",kd[i].bh,kd[i].sjr,kd[i].sphone,kd[i].sdz,kd[i].jjr,kd[i].jphone,kd[i].jdz,kd[i].gs,kd[i].zf,kd[i].fjxx);
}
}
//-----------------------------------------------------------------------------------------------------------------------------
void Delete()
{
long x;
int j,i=0;
FILE *fp;
int n=0;
if((fp=fopen("kuaidi.txt","r"))==NULL){
printf("文件错误");
return;
}
while (!feof(fp))
{
if((fread(&kd[n],sizeof(struct kdxx),1,fp)))
n++;
}
fclose(fp);
printf("输入要删除的快递编号:");
scanf("%d",&x);
while(kd[i].bh!=x&&i<n)
i++; //比较输入的 x 数据与结构体中快递编号元素,若不相同,i 自增 1
if(i==n)
{
printf("未找到相关快递编号!\n");return;
} //若 i 与 n 值相同,说明无此数据,输出“未找到快递信息!”。
for(j=i;j<n;j++)
{
kd[j].bh=kd[j+1].bh; //将快递编号[j+1]中的内容复制到快递编号[j]中。
strcpy(kd[j].gs,kd[j+1].gs); //将快递公司[j+1]中的内容复制到快递公司[j]中。
strcpy(kd[j].sjr,kd[j+1].sjr); //将收件人[j+1]中的内容复制到收件人[j]中。
strcpy(kd[j].sphone,kd[j+1].sphone); //将收件人电话[j+1]中的内容复制到收件人电话[j]中。
strcpy(kd[j].sdz,kd[j+1].sdz); //将收件人地址[j+1]中的内容复制到收件人地址[j]中。
kd[j].zf=kd[j+1].zf; //将资费[j+1]中的内容复制到资费[j]中。
strcpy(kd[j].jjr,kd[j+1].jjr); //将寄件人[j+1]中的内容复制到寄件人[j]中。
strcpy(kd[j].jphone,kd[j+1].jphone); //将寄件人电话[j+1]中的内容复制到寄件人电话[j]中。
strcpy(kd[j].jdz,kd[j+1].jdz); //将寄件人地址[j+1]中的内容复制到寄件人地址[j]中。
strcpy(kd[j].fjxx,kd[j+1].fjxx); //将附加信息[j+1]中的内容复制到附加信息[j]中。
} //将结构体中的元素赋值给前一元素。
n--; //数据删除后,全局变量 n 值(成员数)自减 1。
printf("快递信息已删除!\n");
if((fp=fopen("kuaidi.txt","w"))==NULL){
printf("文件错误");
return;
}
fwrite(kd,sizeof(struct kdxx),n,fp);
fclose(fp);
}
//----------------------------------------------------------------------------------------------------------------
void modify()
{ FILE *fp;
int n=0;
if((fp=fopen("kuaidi.txt","r"))==NULL){
printf("文件错误");
return;
}
while (!feof(fp))
{
if((fread(&kd[n],sizeof(struct kdxx),1,fp)))
n++;
}
fclose(fp);
int bh,i,flag=0;
printf("请输入修改的快递编号:");
scanf("%d",&bh);
for(i=0;i<n;i++)
{if(kd[i].bh==bh)
{flag=i;break;}
}
if(flag!=i)
printf("没有此快递编号!");
else
{
printf("编号:");
scanf("%d",&kd[flag].bh);
printf("快递公司:");
scanf("%s",&kd[flag].gs);
printf("收件人姓名:");
scanf("%s",&kd[flag].sjr);
printf("收件人电话:");
scanf("%s",&kd[flag].sphone);
printf("收件人地址:");
scanf("%s",&kd[flag].sdz);
printf("资费:");
scanf("%d",&kd[flag].zf);
printf("寄件人姓名:");
scanf("%s",&kd[flag].jjr);
printf("寄件人电话:");
scanf("%s",&kd[flag].jphone);
printf("寄件人地址:");
scanf("%s",&kd[flag].jdz);
printf("附加信息:");
scanf("%s",&kd[flag].fjxx);
}
if((fp=fopen("快递.txt","w"))==NULL){
printf("文件错误");
return;
}
fwrite(kd,sizeof(struct kdxx),n,fp);
fclose(fp);
}
//-------------------------------------------------------------------------------
void Findbh() //用户自定义函数,实现对指定数据的查找功能。
{
char s[20]; //定义用户输入的快递编号数据为 char 型,占 20 列。
int i=0;
printf("请输入要查询的快递编号:");
scanf("%s",s);
while(kd[i].bh!=0&&i<n)
i++; //当输入的快递编号与当前快递编号不相同时,i 自增 1,比较下一个成员。
if(i==n){
printf("-------------------------------------------------------------------\n");
printf("快递编号 快递公司 收件人姓名 收件人联系电话 收件人地址 资费 寄件人姓名 寄件人联系电话 寄件人地址 附加信息\n");
printf("-------------------------------------------------------------------\n");
printf("%-10d%-10s%-10s%-10s%-10s%-10s%-10s%-10d%-10s%-10s\n",kd[i].bh,kd[i].gs,kd[i].sjr,
kd[i].sphone,kd[i].sdz,kd[i].zf,kd[i].jjr,kd[i].jphone,kd[i].jdz,kd[i].fjxx);
printf("-------------------------------------------------------------------\n");
}
}
//----------------------------------------------------------------------------------------------------------------------
void Findsphone()
{
char s[20];
int i=0;
printf("请输入要查询的收件人联系电话:");
scanf("%s",s);
while(kd[i].sphone!=0&&i<n)
i++;
if(i==n)
printf("-------------------------------------------------------------------\n");
printf("快递编号 快递公司 收件人姓名 收件人联系电话 收件人地址 资费 寄件人姓名 寄件人联系电话 寄件人地址 附加信息 \n");
printf("-------------------------------------------------------------------\n");
printf("%-10d%-10s%-10s%-10s%-10s%-10s%-10s%-10d%-10s%-10s\n",kd[i].bh,kd[i].gs,kd[i].sjr,
kd[i].sphone,kd[i].sdz,kd[i].zf,kd[i].jjr,kd[i].jphone,kd[i].jdz,kd[i].fjxx);
printf("-------------------------------------------------------------------\n");
}
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。