实现的功能
1.对于整个系统的加密,即设置密码,主要用到了字符串的对比;
2.界面设计;
3.基本信息的增删改查;
4.单号排序;
5.打印。
这是一些用到的函数声明
//函数声明
void password(); //系统加密
void menu(); //菜单栏
void establish();//输入信息
void revamp(); //修改信息
void del(); //删除信息
void save(); //保存信息
void search(); //查询信息
void sort(); //单号排序
void read(); //读取信息
void sum(); //统计包裹数
void print(); //打印报表
typedef struct Express
{
char sender[100];//寄件方
char receiver[100];//收件方
char senderaddress[100];//寄件方地址
char receiveraddress[100];//收件方地址
char tracknumber[100];//快递单号
char phonenumber1[100];//寄件方电话号码
char phonenumber2[100];//收件方电话号码
}express;
加密模块
int main()
{
password(); //系统加密
system("color f3");//改变窗口背景及字体颜色
menu();
}
void password()//系统加密
{
char a[100],b[100]="666666";
printf("————————快递包裹系统V1.0————————\n");
printf("请输入登录密码:");
scanf("%s",&a);
if(strcmp(a,b)==0)
{
printf("登陆成功!\n");
system("pause");//暂停
}
else
{
printf("密码输入错误!无法进入系统!\n");
exit(0);
}
}
界面菜单
void menu() //菜单栏
{ int n;
while(1)
{ system("cls");//清屏
puts("\t 快递包裹系统V1.0");
puts("***************MENU**************");
puts("*\t 1.输入信息\t\t*");
puts("*\t 2.修改信息\t\t*");
puts("*\t 3.删除信息\t\t*");
puts("*\t 4.保存信息\t\t*");
puts("*\t 5.查询信息\t\t*");
puts("*\t 6.单号排序\t\t*");
puts("*\t 7.读取信息\t\t*");
puts("*\t 8.统计数量\t\t*");
puts("*\t 9.打印报表\t\t*");
puts("*\t 0.退出\t\t*");
puts("*********************************");
puts("请输入序号:");
n=getchar();//从键盘输入一个字符
switch(n)
{
case'1':establish();break;//输入信息
case'2':revamp();break; //修改信息
case'3':del();break; //删除信息
case'4':save();break; //保存信息
case'5':search();break; //查询信息
case'6':sort();break; //单号排序
case'7':read();break; //读取信息
case'8':sum();break; //统计数量
case'9':print();break; //打印报表
case'0':exit(0); //退出
}
}
}
对于信息增删查改
void establish()//输入信息
{
node *pnewnode=(node*)malloc(sizeof(node));
pnewnode->next=NULL;
if(head==NULL)
{
head=pnewnode;
}
else
{
pnewnode->next=head;
head=pnewnode;
}
printf("请输入相关信息\n");
printf("寄件方姓名:");
scanf("%s",pnewnode->express.sender);
printf("寄件方电话号码:");
scanf("%s",pnewnode->express.phonenumber1);
printf("寄件方地址:");
scanf("%s",pnewnode->express.senderaddress);
printf("收件方姓名:");
scanf("%s",pnewnode->express.receiver);
printf("收件方电话号码:");
scanf("%s",pnewnode->express.phonenumber2);
printf("收件方地址:");
scanf("%s",pnewnode->express.receiveraddress);
printf("快递单号:");
scanf("%s",pnewnode->express.tracknumber);
printf("输入成功\n");
system("pause");//暂停
system("cls");//清屏
}
void revamp()//修改信息
{
node *p1=head;
char tracknumber[100],ch;
int flog=0;
printf("\t\t\t\t*修改数据*\n");
printf("===========================================================================\n");
printf("请输入将要修改包裹单号:");
scanf("%s",tracknumber);
while(p1!=NULL)
{
if(strcmp(tracknumber,p1->express.tracknumber)==0)
{
printf("该包裹基本信息\n");
printf("寄件方姓名:%s\n",p1->express.sender);
printf("寄件方电话号码:%s\n",p1->express.phonenumber1);
printf("寄件方地址:%s\n",p1->express.senderaddress);
printf("收件方姓名:%s\n",p1->express.receiver);
printf("收件方电话号码:%s\n",p1->express.phonenumber2);
printf("收件方地址:%s\n",p1->express.receiveraddress);
printf("快递单号:%s\n",p1->express.tracknumber);
flog=1;
printf("\n请选择要修改的信息\n");
printf("\t1.寄件方姓名\t2.寄件方电话号码\t3.寄件方地址\t4.收件方姓名\n");
printf("\t5.收件方电话号码\t6.收件方地址\t7.快递单号\n");
printf("您的选择是(1~7):");
scanf("%s",&ch);
switch(ch)
{
case'1':printf("请输入修改之后的内容:\n寄件方姓名:");
scanf("%s",p1->express.sender);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'2':printf("寄件方电话号码:");
scanf("%s",p1->express.phonenumber1);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'3':printf("寄件方地址:");
scanf("%s",p1->express.senderaddress);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'4':printf("收件方姓名:");
scanf("%s",p1->express.receiver);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'5':printf("收件方电话号码:");
scanf("%s",p1->express.phonenumber2);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'6':printf("收件方地址:");
scanf("%s",p1->express.receiveraddress);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'7':printf("快递单号:");
scanf("%s",p1->express.tracknumber);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
}
}
p1=p1->next;
}
if(flog==0)
{
printf("没有找到该人的信息!\n");
}
system("pause");//暂停
system("cls");//清屏
}
void del()//删除信息
{
node *p1,*p2;
char tracknumber[100];
int flog=1;
printf("请输入要删除的快递单号:");
scanf("%s",tracknumber);
p2=p1=head;
while(p1!=NULL&&flog)
{
if(strcmp(tracknumber,p1->express.tracknumber)==0)//比较字符
{
printf("您要找到的数据\n");
printf("寄件方姓名:%s\n",p1->express.sender);
printf("寄件方电话号码:%s\n",p1->express.phonenumber1);
printf("寄件方地址:%s\n",p1->express.senderaddress);
printf("收件方姓名:%s\n",p1->express.receiver);
printf("收件方电话号码:%s\n",p1->express.phonenumber2);
printf("收件方地址:%s\n",p1->express.receiveraddress);
printf("快递单号:%s\n",p1->express.tracknumber);
if(p1==head)
{
head=p1->next;
free(p1);
}
else
{
p2->next=p1->next;
free(p1);
}
flog=0;
printf("删除成功\n");
}
p1=p1->next;
}
if(flog)
{
printf("未有此包裹!");
}
system("pause");
system("cls");
}
void save()//保存信息
{
FILE *fp=fopen("file.dat","w");
system("cls");
if(fp==NULL)
{
printf("打开文件失败");
return;
}
p=head;
while(p!=NULL)
{
fwrite(&p->express,1,sizeof(Express),fp);
p=p->next;
}
fclose(fp);
printf("\n数据保存成功\n");
system("pause");
system("cls");
}
void search()//根据快递单号查询信息
{
char tracknumber[100];
int flog=1;
node *p=NULL;
p=head;
printf("请输入快递单号:");
scanf("%s",tracknumber);
while(p!=NULL)
{
if(strcmp(tracknumber,p->express.tracknumber)==0)//比较字符
{
printf("您要找到的数据\n");
printf("寄件方姓名:%s\n",p->express.sender);
printf("寄件方电话号码:%s\n",p->express.phonenumber1);
printf("寄件方地址:%s\n",p->express.senderaddress);
printf("收件方姓名:%s\n",p->express.receiver);
printf("收件方电话号码:%s\n",p->express.phonenumber2);
printf("收件方地址:%s\n",p->express.receiveraddress);
printf("快递单号:%s\n",p->express.tracknumber);
flog=0;
}
p=p->next;
}
if(flog)
{
printf("查无此包裹!\n");
}
system("pause");//暂停
system("cls");//清屏
}
以上就是核心功能的部分,对于此课程设计,还有美中不足的是,对于收录的快递单号没有进行查重,于是乎,在面对庞大的信息量时,当人为的记不住,就会导致错误的出现,希望读者能够完善此系统。最后附上完整的代码——
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//函数声明
void password(); //系统加密
void menu(); //菜单栏
void establish();//输入信息
void revamp(); //修改信息
void del(); //删除信息
void save(); //保存信息
void search(); //查询信息
void sort(); //单号排序
void read(); //读取信息
void sum(); //统计包裹数
void print(); //打印报表
typedef struct Express
{
char sender[100];//寄件方
char receiver[100];//收件方
char senderaddress[100];//寄件方地址
char receiveraddress[100];//收件方地址
char tracknumber[100];//快递单号
char phonenumber1[100];//寄件方电话号码
char phonenumber2[100];//收件方电话号码
}express;
//节点
typedef struct node
{
struct Express express;
struct node *next;
}node;
node *head=NULL;//链表头指针为空
node *p=NULL;
int main()
{
password(); //系统加密
system("color f3");//改变窗口背景及字体颜色
menu();
}
void password()//系统加密
{
char a[100],b[100]="666666";
printf("————————快递包裹系统V1.0————————\n");
printf("请输入登录密码:");
scanf("%s",&a);
if(strcmp(a,b)==0)
{
printf("登陆成功!\n");
system("pause");//暂停
}
else
{
printf("密码输入错误!无法进入系统!\n");
exit(0);
}
}
void menu() //菜单栏
{ int n;
while(1)
{ system("cls");//清屏
puts("\t 快递包裹系统V1.0");
puts("***************MENU**************");
puts("*\t 1.输入信息\t\t*");
puts("*\t 2.修改信息\t\t*");
puts("*\t 3.删除信息\t\t*");
puts("*\t 4.保存信息\t\t*");
puts("*\t 5.查询信息\t\t*");
puts("*\t 6.单号排序\t\t*");
puts("*\t 7.读取信息\t\t*");
puts("*\t 8.统计数量\t\t*");
puts("*\t 9.打印报表\t\t*");
puts("*\t 0.退出\t\t*");
puts("*********************************");
puts("请输入序号:");
n=getchar();//从键盘输入一个字符
switch(n)
{
case'1':establish();break;//输入信息
case'2':revamp();break; //修改信息
case'3':del();break; //删除信息
case'4':save();break; //保存信息
case'5':search();break; //查询信息
case'6':sort();break; //单号排序
case'7':read();break; //读取信息
case'8':sum();break; //统计数量
case'9':print();break; //打印报表
case'0':exit(0); //退出
}
}
}
void establish()//输入信息
{
node *pnewnode=(node*)malloc(sizeof(node));
pnewnode->next=NULL;
if(head==NULL)
{
head=pnewnode;
}
else
{
pnewnode->next=head;
head=pnewnode;
}
printf("请输入相关信息\n");
printf("寄件方姓名:");
scanf("%s",pnewnode->express.sender);
printf("寄件方电话号码:");
scanf("%s",pnewnode->express.phonenumber1);
printf("寄件方地址:");
scanf("%s",pnewnode->express.senderaddress);
printf("收件方姓名:");
scanf("%s",pnewnode->express.receiver);
printf("收件方电话号码:");
scanf("%s",pnewnode->express.phonenumber2);
printf("收件方地址:");
scanf("%s",pnewnode->express.receiveraddress);
printf("快递单号:");
scanf("%s",pnewnode->express.tracknumber);
printf("输入成功\n");
system("pause");//暂停
system("cls");//清屏
}
void revamp()//修改信息
{
node *p1=head;
char tracknumber[100],ch;
int flog=0;
printf("\t\t\t\t*修改数据*\n");
printf("===========================================================================\n");
printf("请输入将要修改包裹单号:");
scanf("%s",tracknumber);
while(p1!=NULL)
{
if(strcmp(tracknumber,p1->express.tracknumber)==0)
{
printf("该包裹基本信息\n");
printf("寄件方姓名:%s\n",p1->express.sender);
printf("寄件方电话号码:%s\n",p1->express.phonenumber1);
printf("寄件方地址:%s\n",p1->express.senderaddress);
printf("收件方姓名:%s\n",p1->express.receiver);
printf("收件方电话号码:%s\n",p1->express.phonenumber2);
printf("收件方地址:%s\n",p1->express.receiveraddress);
printf("快递单号:%s\n",p1->express.tracknumber);
flog=1;
printf("\n请选择要修改的信息\n");
printf("\t1.寄件方姓名\t2.寄件方电话号码\t3.寄件方地址\t4.收件方姓名\n");
printf("\t5.收件方电话号码\t6.收件方地址\t7.快递单号\n");
printf("您的选择是(1~7):");
scanf("%s",&ch);
switch(ch)
{
case'1':printf("请输入修改之后的内容:\n寄件方姓名:");
scanf("%s",p1->express.sender);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'2':printf("寄件方电话号码:");
scanf("%s",p1->express.phonenumber1);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'3':printf("寄件方地址:");
scanf("%s",p1->express.senderaddress);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'4':printf("收件方姓名:");
scanf("%s",p1->express.receiver);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'5':printf("收件方电话号码:");
scanf("%s",p1->express.phonenumber2);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'6':printf("收件方地址:");
scanf("%s",p1->express.receiveraddress);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
case'7':printf("快递单号:");
scanf("%s",p1->express.tracknumber);
printf("\n修改成功!\n");
printf("===========================================================================\n");
break;
}
}
p1=p1->next;
}
if(flog==0)
{
printf("没有找到该人的信息!\n");
}
system("pause");//暂停
system("cls");//清屏
}
void del()//删除信息
{
node *p1,*p2;
char tracknumber[100];
int flog=1;
printf("请输入要删除的快递单号:");
scanf("%s",tracknumber);
p2=p1=head;
while(p1!=NULL&&flog)
{
if(strcmp(tracknumber,p1->express.tracknumber)==0)//比较字符
{
printf("您要找到的数据\n");
printf("寄件方姓名:%s\n",p1->express.sender);
printf("寄件方电话号码:%s\n",p1->express.phonenumber1);
printf("寄件方地址:%s\n",p1->express.senderaddress);
printf("收件方姓名:%s\n",p1->express.receiver);
printf("收件方电话号码:%s\n",p1->express.phonenumber2);
printf("收件方地址:%s\n",p1->express.receiveraddress);
printf("快递单号:%s\n",p1->express.tracknumber);
if(p1==head)
{
head=p1->next;
free(p1);
}
else
{
p2->next=p1->next;
free(p1);
}
flog=0;
printf("删除成功\n");
}
p1=p1->next;
}
if(flog)
{
printf("未有此包裹!");
}
system("pause");
system("cls");
}
void save()//保存信息
{
FILE *fp=fopen("file.dat","w");
system("cls");
if(fp==NULL)
{
printf("打开文件失败");
return;
}
p=head;
while(p!=NULL)
{
fwrite(&p->express,1,sizeof(Express),fp);
p=p->next;
}
fclose(fp);
printf("\n数据保存成功\n");
system("pause");
system("cls");
}
void search()//根据快递单号查询信息
{
char tracknumber[100];
int flog=1;
node *p=NULL;
p=head;
printf("请输入快递单号:");
scanf("%s",tracknumber);
while(p!=NULL)
{
if(strcmp(tracknumber,p->express.tracknumber)==0)//比较字符
{
printf("您要找到的数据\n");
printf("寄件方姓名:%s\n",p->express.sender);
printf("寄件方电话号码:%s\n",p->express.phonenumber1);
printf("寄件方地址:%s\n",p->express.senderaddress);
printf("收件方姓名:%s\n",p->express.receiver);
printf("收件方电话号码:%s\n",p->express.phonenumber2);
printf("收件方地址:%s\n",p->express.receiveraddress);
printf("快递单号:%s\n",p->express.tracknumber);
flog=0;
}
p=p->next;
}
if(flog)
{
printf("查无此包裹!\n");
}
system("pause");//暂停
system("cls");//清屏
}
void sort()//单号排序
{
}
void read()//读取信息
{
FILE *fp=fopen("file.dat","r");
struct Express express;
if(fp==NULL)
{
printf("打开文件失败");
return;
}
while(fread(&express,1,sizeof(Express),fp))
{
node* pnewnode=(node *)malloc(sizeof(node));
pnewnode->next=NULL;
memcpy(pnewnode,&express,sizeof(struct Express));
if(head==NULL)
{
head=pnewnode;
}
else
{
pnewnode->next=head;
head=pnewnode;
}
}
fclose(fp);
printf("加载数据成功...\n");
system("pause");//暂停
system("cls");//清屏
}
void sum()//统计包裹数
{
struct Express express;
FILE *fp;
int n=0;
if((fp=fopen("file.dat","r+"))==NULL)
{
printf("文件不存在!\n");
return ;
}
while(!feof(fp))
if(fread(&express,1,sizeof(Express),fp))
n++; //统计记录包裹个数
if(n==0)
{printf("没有记录!\n");fclose(fp);return;}
printf("包裹数量:%d\n",n);//将统计的个数输出
fclose(fp);
system("pause");//暂停
system("cls");//清屏
}
void print()//打印报表
{
system("cls");
puts("*************************************************************************************************");
puts("*\t\t\t\t\t欢迎来到快递包裹系统V1.0\t\t\t\t\t*");
puts("*************************************************************************************************");
puts("* 快递单号 * 寄件方 * 寄件方号码 * 寄件方地址 * 收件方 * 收件方号码 * 收件方地址 *");
puts("*************************************************************************************************");
p=head;
while(p!=NULL)
{
printf("* %s * %s * %s * %s * %s * %s * %s *\n",
p->express.tracknumber,
p->express.sender,
p->express.phonenumber1,
p->express.senderaddress,
p->express.receiver,
p->express.phonenumber2,
p->express.receiveraddress);
p=p->next;
}
puts("*************************************************************************************************");
system("pause");//暂停
system("cls");//清屏
}