#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
//结构体的定义
typedef struct date //日期类型
{
short year;
short month;
short day;
}SDATE;
typedef struct phone //手机信息类型
{
char ID[20]; //手机编号
char modle[20]; //手机型号
char brand[20]; //品牌
float pprice; //进价
int num; //数量
}SPHO;
typedef struct sale //销售信息类型
{
char ID[20];
char modle[20];
char brand[20];
float sprice; //售价
SDATE sale_time; //销售时间
int num; //销售数量
}SSALE;
#define SDATE_LEN sizeof(SDATE)
#define SPHO_LEN sizeof(SPHO)
#define SSALE_LEN sizeof(SSALE)
#define PHONENUM 1000 //PHONENUM为系统允许的最大手机数量
#define SALENUM 1000 //SALENUM为系统允许的最大销售数量
SPHO phone[PHONENUM]={0}; //手机数组,初始化为0
SSALE sale[SALENUM]={0}; //销售数组,初始化为0
//登陆模块函数声明
void Login(int *ppn,int *psn);
//手机信息管理模块的函数声明
void InputOnephone(int i); //输入一个手机信息的函数
int Loadphones(void); //从文件中载入全部手机信息的函数
void SaveAllphones(int pn); //保存全部手机信息的函数
int Originalphone(void); //手机信息的初始化函数
void Modifyphone(int pn); //修改手机信息的函数
int Addphone(int pn); //添加手机信息的函数
int Delphone(int pn); //删除手机信息的函数
void OutputOnephone(int i); //输出一个手机信息的函数
//销售信息管理模块的函数声明
void InputOnesale(int i,int pn); //输入一个销售信息的函数
void SaveOnesale(int i); //保存一个销售信息的函数
void SaveAllsales(int sn); //保存全部销售信息的函数
int Originalsale(int pn); //销售信息的初始化函数
int Addsale(int sn,int pn); //添加销售信息的函数
int Loadsales(void); //从文件中载入全部销售信息的函数
void OutputOnesale(int i);
int SALE(int sn,int pn); //销售管理函数
//int Looksale(int sn);
//手机信息查询的函数声明
void SearchMenu(int pn,int sn); //手机查询函数
void SearchID(int pn); //按手机编号查询函数
void Searchbrand(int sn); //按品牌查询
void Searchdate(int sn); //按时间查询
//销售信息统计信息查询的函数声明
void StatisticsMenu(int sn,int pn); //销售信息统计函数
void Statisticsbrand(int sn); //按手机品牌统计
void Statisticsmodle(int sn,int pn); //按手机型号统计
void Statisticsdate(int sn); //按日期统计
//排序的函数声明
void SortMenu(int pn,int sn); //排序函数
void Sortpprice(int pn); //对手机进价进行排序
void Sortsale_time(int sn); //对销售时间进行排序
void main(void)
{
int select,pn,sn;
pn=Loadphones(); //调用Loadphone(),返回值为手机信息,将其赋值给pn
if(pn==0)
printf("手机信息为空!\n\n");
sn=Loadsales();
if(sn==0)
printf("销售信息为空!\n\n");
while(1)
{
printf("\n");
printf("\t*****************************************************************\n");
printf("\t*****************************************************************\n");
printf("\t** **\n");
printf("\t** **\n");
printf("\t** 手机销售管理系统 **\n");
printf("\t** **\n");
printf("\t** **\n");
printf("\t*****************************************************************\n");
printf("\t*****************************************************************\n");
printf("\n");
printf("\t-----------------------------------------------------------------\n");
printf("\t 1.创建手机信息 2.修改手机信息\n");
printf("\t 3.增加手机信息 4.删除手机信息\n");
printf("\t 5.手机销售管理 6.销售查询信息\n");
printf("\t 7.手机信息统计 8.手机信息排序\n");
printf("\t 0.退出管理系统\n");
printf("\t ****************************************************************\n");
printf("请选择你要进行的服务(0-8):\n");
scanf("%d",&select);
getchar(); //用于读取回车符,消除对以后数据的影响
switch(select)
{
case 1: pn=Originalphone(); break;
case 2: Modifyphone(pn); break;
case 3: pn=Addphone(pn); break;
case 4: pn=Delphone(pn); break;
case 5: sn=SALE(sn,pn); break;
case 6: SearchMenu(pn,sn); break;
case 7: StatisticsMenu(sn,pn); break;
case 8: SortMenu(pn,sn); break;
case 0: printf("\n谢谢使用!再见\n"); exit(1);
default: printf("\n按键错误,请重新选择!\n");
}
}
}
//从文件"phone.dat"中载入全部手机信息
int Loadphones(void)
{
FILE *fb;
int pn=0;
if((fb=fopen("phone.dat","rb+"))==NULL)
{
printf("Can`t open file phone.dat\n");
return(pn);
}
while(!feof(fb))
if(fread(&phone[pn],SPHO_LEN,1,fb))
pn++;
fclose(fb);
return(pn);
}
//从键盘输入一个手机的全部信息
void InputOnephone(int i)
{
printf(" 手机编号:");
gets(phone[i].ID);
printf(" 手机型号: ");
gets(phone[i].modle);
printf(" 品牌: ");
gets(phone[i].brand);
printf(" 进价: ");
scanf("%f",&phone[i].pprice);
printf("数量:");
scanf("%f",&phone[i].num);
getchar();
}
//输出一个手机的全部信息
void OutputOnephone(int i)
{
printf("\n");
printf("手机编号:");
puts(phone[i].ID);
printf("手机型号:");
puts(phone[i].modle);
printf("品牌:");
puts(phone[i].brand);
printf("进价:");
printf("%.2f\n",phone[i].pprice);
printf("数量:");
printf("%.2f",phone[i].num);
}
//将一个手机的信息保存到文件"phone.dat"中
void SaveOnephone(int i)
{
FILE *fb;
if((fb=fopen("phone.dat","rb+"))==NULL)
{
printf("Can`t open file phone.dat\n");
exit(1);
}
fseek(fb,SPHO_LEN*i,0); //文件指针定位到第i个手机
fwrite(&phone[i],SPHO_LEN,1,fb);
fclose(fb);
}
//将全部信息保存到文件"phone,dat"中
void SaveAllphones(int pn)
{
FILE *fb;
if((fb=fopen("phone.dat","wb"))==NULL)
{
printf("Can`t open file phone.dat\n");
exit(1);
}
fwrite(phone,SPHO_LEN,pn,fb);
fclose(fb);
}
//手机信息初始化
int Originalphone()
{
int n;
char c='y';
for(n=0;c=='y'||c=='Y';n++)
{
printf("\n输入手机%d的信息:\n",n+1);
InputOnephone(n); //调用函数,输入第n个手机数据
printf("\n继续输入请按'y',停止输入请按'n':");
c=getchar();
getchar();
}
SaveAllphones(n); //将输入的n个手机的数据保存至文件
return(n); //返回n的值,即输出手机的数量
}
//添加手机信息
int Addphone(int pn)
{
char c='y';
FILE *fb;
if((fb=fopen("phone.dat","ab"))==NULL)
{
printf("Can`t open file phone.dat\n");
exit(1);
}
while(c=='y'||c=='Y')
{
InputOnephone(pn); //调用函数输入第n个手机的信息
fwrite(&phone[pn],SPHO_LEN,1,fb);
pn++;
printf("\n继续输入其他手机的信息吗?(y/n):");
c=getchar();
getchar();
}
printf("\n按任意键继续!\n");
getch();
fclose(fb);
return(pn);
}
//删除手机信息
int Delphone(int pn)
{
int i,k=-1;
char id[20],c1='y',c2;
if(pn==0)
{
printf("\n手机信息为空,无法执行操作!\n");
return(pn);
}
while(c1=='y'||c1=='Y')
{
c2='n';
printf("\n请输入要删除的手机的手机编号:");
gets(id);
for(i=0;i<pn;i++)
if(strcmp(phone[i].ID,id)==0)
{
k=i;
break;
}
if(k<0)
printf("\n输入的手机编号有误,请重新输入!\n");
else
{
printf("\n显示该手机的信息:\n");
OutputOnephone(k);
printf("\n确定要删除该手机的全部信息吗?(y/n):");
c2=getchar();
getchar();
if(c2=='y')
{
for(i=k;i<pn;i++)
phone[i]=phone[i+1];
pn--;
printf("\n删除成功!\n");
}
else
printf("\n取消删除!\n");
printf("\n继续删除其他手机的信息吗?(y/n):");
c1=getchar();
getchar();
}
}
SaveAllphones(pn);
printf("\n按任意键继续!\n");
getch();
return(pn);
}
//手机信息的修改
void Modifyphone(int pn)
{
int select,k,i;
char id[20],c1='y',c2;
if(pn==0)
{
printf("\n手机信息为空,无法进行操作!\n");
return;
}
while(c1=='y'||c1=='Y')
{
k=-1;
c2='y';
printf("\n请输入要修改的手机的编号:");
gets(id);
for(i=0;i<pn;i++)
if(strcmp(phone[i].ID,id)==0)
{
k=i;
break;
}
if(k<0) //k小于0,在数组phone中没找到输入编号的手机
printf("\n输入的手机编号有误,请重新输入!\n");
else //k大于0,找到该手机
{
printf("\n显示该手机的信息:\n");
OutputOnephone(k); //显示该手机的全部信息
while(c2=='y'||c2=='Y')
{
printf("\n 手机信息包括以下数据项\n");
printf("----------------------------------------------\n");
printf(" 1.手机编号 2.手机型号\n");
printf(" 3.手机品牌 4.手机进价\n");
printf(" 5.手机数量 \n");
printf("---------------------------------------------\n");
printf("\n输入要修改的数据项(1--5):");
scanf("%d",&select);
getchar();
switch(select)
{
case 1:printf("手机编号:");
gets(phone[k].ID);
break;
case 2:printf("手机型号:");
gets(phone[k].modle);
break;
case 3:printf("品牌:");
gets(phone[k].brand);
break;
case 4:printf("进价:");
scanf("%f",&phone[k].pprice);
getchar();
break;
case 5:printf("数量:");
scanf("%f",&phone[k].num);
getchar();
default:printf("\n按键错误,请重新输入!\n");
}
printf("\n还要修改此手机的其他信息吗?(y/n):");
c2=getchar();
getchar();
}
}
SaveOnephone(k); //保存修改后手机的信息
printf("\n还需要修改其他手机的信息吗?(y/n):");
c1=getchar();
getchar();
}
printf("\n按任意键继续!\n");
getch();
}
//销售管理
int SALE(int sn,int pn)
{
if(sn==0)
{
printf("\n销售文件无任何数据\n");
sn=Originalsale(pn);
}
else
sn=Addsale(sn,pn);
return(sn);
}
//从文件"save.dat"中载入全部手机信息
int Loadsales(void)
{
FILE *fb;
int sn=0;
if((fb=fopen("sale.dat","rb+"))==NULL)
{
printf("Can`t open file sale.dat\n");
return(sn);
}
while(!feof(fb))
if(fread(&sale[sn],SSALE_LEN,1,fb))
sn++;
fclose(fb);
return(sn);
}
//将全部销售信息保存到文件"sale,dat"中
void SaveAllsale(int sn)
{
FILE *fb;
if((fb=fopen("sale.dat","wb"))==NULL)
{
printf("Can`t open file sale.dat\n");
exit(1);
}
fwrite(sale,SSALE_LEN,sn,fb);
fclose(fb);
}
//销售信息的初始化
int Originalsale(int pn)
{
int n;
char c='y';
for(n=0;c=='y'||c=='Y';n++)
{
printf("\n输入销售手机%d的信息:\n",n+1);
InputOnesale(n,pn); //调用函数,输入第n个销售手机数据
printf("\n继续输入请按'y',停止输入请按'n':");
c=getchar();
getchar();
}
SaveAllsale(n); //将输入的n个销售手机的数据保存至文件
return(n); //返回n的值,即输出销售手机的数量
}
//从键盘输入一个销售手机的全部信息
void InputOnesale(int i,int pn)
{
int k=-1,n;
char id[20],c1='y';
if(pn==0)
{
printf("\n手机信息为空,无法进行操作!\n");
return;
}
printf("\n请输入的销售的手机的编号:");
gets(id);
for(n=0;n<pn;n++)
if(strcmp(phone[n].ID,id)==0)
{
k=n;
break;
}
if(k<0) //k小于0,在数组phone中没找到输入编号的手机
printf("\n输入的手机编号有误,请重新输入!\n");
else //k大于0,找到该手机
{
strcpy(sale[i].ID,id);
printf(" 手机型号:");
puts(phone[n].modle);
strcpy(sale[i].modle,phone[n].modle);
printf(" 品牌: ");
puts(phone[n].brand);
strcpy(sale[i].brand,phone[n].brand);
printf(" 售价: ");
scanf("%f",&sale[i].sprice);
getchar();
printf(" 数量: ");
scanf("%d",&sale[n].num);
printf("销售日期(年.月.日):");
scanf("%d.%d.%d",&sale[i].sale_time.year,&sale[i].sale_time.month,&sale[i].sale_time.day);
getchar();
}
}
//输出一个手机的销售信息
void OutputOnesale(int i)
{
printf("\n");
printf("手机编号:");
puts(sale[i].ID);
printf("手机型号:");
puts(sale[i].modle);
printf("品牌:");
puts(sale[i].brand);
printf("售价:");
printf("%.2f\n",sale[i].sprice);
printf("数量:");
printf("%.2f",sale[i].num);
}
//添加销售手机信息
int Addsale(int sn,int pn)
{
char c='y';
FILE *fb;
if((fb=fopen("sale.dat","ab"))==NULL)
{
printf("Can`t open file sale.dat\n");
exit(1);
}
while(c=='y'||c=='Y')
{
printf("\n请输入要添加的销售手机信息:\n");
InputOnesale(sn,pn); //调用函数输入第n个销售手机的信息
fwrite(&sale[sn],SSALE_LEN,1,fb);
sn++;
printf("\n继续输入其他要输入的销售手机的信息吗?(y/n):");
c=getchar();
getchar();
}
printf("\n按任意键继续!\n");
getch();
fclose(fb);
return(sn);
}
//查询功能模块
void SearchMenu(int pn,int sn)
{
int select;
while(1)
{
printf("\n 欢迎使用查询服务\n");
printf("############################################################\n");
printf("\n");
printf(" 1.按编号查询 2.按品牌查询\n");
printf(" 3.按日期查询 0.退出查询系统 \n");
printf("\n");
printf("############################################################\n");
printf("请选择查询方式(0-3):");
scanf("%d",&select);
getchar();
switch(select)
{
case 1:SearchID(pn); break;
case 2:Searchbrand(sn); break;
case 3:Searchdate(sn); break;
case 0: return;
default: printf("\n按键错误,请重新选择!\n");
}
}
}
//按手机编号号查询
void SearchID(int pn)
{
int i,j,k;
char sID[20],c='y';
while(c=='y'||c=='Y')
{
k=-1;
printf("\n请输入手机编号:");
gets(sID);
for(i=0,j=1;i<pn;i++)
if(strcmp(phone[i].ID,sID)==0)
{
k=i;
printf("\n手机%d的信息是:\n",j++);
OutputOnephone(k);
}
if(j==1||k==-1)
printf("\n抱歉!没有找到相应的手机信息!\n");
printf("\n要继续按手机编号查询其他手机的信息吗?(y/n):");
c=getchar();
getchar();
}
printf("\n按任意键继续!\n");
getch();
}
//按品牌查询
void Searchbrand(int sn)
{
int i,j,k;
char sbrand[20],c='y';
while(c=='y'||c=='Y')
{
k=-1;
printf("\n请输入销售品牌:");
gets(sbrand);
for(i=0,j=1;i<sn;i++)
if(strcmp(sale[i].brand,sbrand)==0)
{
k=i;
printf("\n销售手机%d的信息是:",j++);
OutputOnesale(k);
}
if(j==1||k==-1)
printf("\n抱歉!没有找到相应的销售手机信息!\n");
printf("\n要继续按品牌查询其他销售手机的信息吗?(y/n):");
c=getchar();
getchar();
}
printf("\n按任意键继续!\n");
getch();
}
//按时间查询
void Searchdate(int sn)
{
int i,j,k,year,month,day;
char c='y';
while(c=='y'||c=='Y')
{
k=-1;
printf("\n请输入时间(年.月.日):");
scanf("%d.%d.%d",&year,&month,&day);
getchar();
for(i=0,j=1;i<sn;i++)
if(sale[i].sale_time.year==year)
{
k=i;
if(sale[i].sale_time.month!=month)
continue;
if(sale[i].sale_time.day!=day)
continue;
printf("\n销售手机%d的信息:\n",j++);
OutputOnesale(k);
}
if(k==-1||j==1)
printf("\n抱歉!没有找到相应的销售手机信息!\n");
printf("\n继续按时间查询其他销售手机的信息吗?(y/n):");
c=getchar();
getchar();
}
printf("\n按任意键继续!\n");
getch();
}
//统计功能模块
void StatisticsMenu(int sn,int pn)
{
int select;
while(1)
{
printf("\n 统计系统\n");
printf("#############################################################\n");
printf("\n");
printf(" 1.按品牌统计 2.按手机型号统计\n");
printf(" 3.按日期统计 0.退出统计系统\n");
printf("\n");
printf("#############################################################\n");
printf("请选择统计方式(0-3):");
scanf("%d",&select);
getchar();
switch(select)
{
case 1:Statisticsbrand(sn); break;
case 2:Statisticsmodle(sn,pn); break;
case 3:Statisticsdate(sn); break;
case 0: return;
default: printf("\n按键错误,请重新选择!\n");
}
}
}
//按品牌统计
void Statisticsbrand(int sn)
{
int i,j,k=-1;
float m;
char sbrand[20],c='y';
while(c=='y'||c=='Y')
{
m=0;
printf("\n请输入销售品牌:");
gets(sbrand);
for(i=0,j=0;i<sn;i++)
if(strcmp(sale[i].brand,sbrand)==0)
{
k=i;
j++;
m=m+sale[k].sprice;
}
if(j==0||k==-1)
printf("\n抱歉,没找到相应的销售信息!\n");
else
{
printf("\n该品牌手机的总销售量为:%d",j);
printf("\n该品牌手机的总销售金额为:%.2f",m);
}
printf("\n是否还要统计其他品牌手机的信息?(y/n):");
c=getchar();
getchar();
}
printf("按任意键继续!");
getch();
}
//按型号统计
void Statisticsmodle(sn,pn)
{
int i,j,n;
float m,k;
char smodle[20],id[20],c='y';
while(c=='y'||c=='Y')
{
k=0;
m=0;
printf("\n请输入销售的手机型号:");
gets(smodle);
for(i=0,j=0;i<sn;i++)
{
if(strcmp(sale[i].modle,smodle)==0)
{
strcpy(id,sale[i].ID);
for(n=0;n<pn;n++)
if(strcmp(phone[n].ID,id)==0)
{
k=sale[i].sprice-phone[n].pprice;
j++;
m=m+k;
}
}
}
if(j==0)
printf("\n抱歉,没找到相应的销售信息!\n");
else
printf("\n该手机型号的手机手机总销售利润为:%.2f",m);
printf("\n 是否还要统计其他手机型号手机的信息?(y/n)");
c=getchar();
getchar();
}
printf("按任意键继续!");
getch();
}
//按销售日期统计
void Statisticsdate(int sn)
{
int i,j,k,m,year,month;
char c='y';
float n;
while(c=='y'||c=='Y')
{
n=0;
m=0;
printf("\n请输入要统计的时间(年.月):");
scanf("%d.%d",&year,&month);
getchar();
for(i=0,j=0;i<sn;i++)
{
if(sale[i].sale_time.year==year)
{
k=i;
if(sale[k].sale_time.month!=month)
continue;
m++;
n=n+sale[k].sprice;
}
}
if(j=0)
printf("\n抱歉,没找到相应的销售信息!\n");
else
{
printf("\n该月手机的销售总量为:%d",m);
printf("\n该月手机的总销售金额为:%.2f",n);
}
printf("\n 是否还要统计其他日期手机的信息?(y/n)");
c=getchar();
getchar();
}
printf("按任意键继续!");
getch();
}
//排序函数
void SortMenu(int pn,int sn)
{
int select;
while(1)
{
printf("\n 排序系统\n");
printf("##########################################\n");
printf("\n");
printf(" 1.按手机进价排序:\n");
printf(" 2.按销售日期排序:\n");
printf(" 0.退出排序系统:\n");
printf("\n");
printf("##########################################\n");
printf("请选择排序方式(0-2):");
scanf("%d",&select);
getchar();
switch(select)
{
case 1:Sortpprice(pn); break;
case 2:Sortsale_time(sn); break;
case 0: return;
default: printf("\n按键错误,请重新选择!\n");
}
}
}
//按手机进价排序
void Sortpprice(int pn)
{
SPHO temp;
int i,j;
for(i=0;i<pn-1;i++)
for(j=0;j<pn-i-1;j++)
if(phone[j].pprice>phone[j+1].pprice)
{
temp=phone[j];
phone[j]=phone[j+1];
phone[j+1]=temp;
}
printf("\n排序后的手机信息为:\n");
printf("\n手机编号 手机型号 品牌 数量 进价\n");
for(i=0;i<pn;i++)
{
printf("%-11s %-10s%-10s %.2f %.2f",phone[i].ID,phone[i].modle,phone[i].brand,phone[i].num,phone[i].pprice);
printf("\n");
}
printf("\n按任意键继续!\n");
getch();
}
//
void Sortsale_time(int sn)
{
SSALE temp;
int i,j;
for(i=0;i<sn-1;i++)
for(j=0;j<sn-i-1;j++)
if(sale[j].sale_time.year>sale[j+1].sale_time.year||(sale[j].sale_time.year==sale[j+1].sale_time.year&&sale[j].sale_time.month>sale[j+1].sale_time.month)||(sale[j].sale_time.year==sale[j+1].sale_time.year&&sale[j].sale_time.month==sale[j+1].sale_time.month&&sale[j].sale_time.day>sale[j+1].sale_time.day))
{
temp=sale[j];
sale[j]=sale[j+1];
sale[j+1]=temp;
}
printf("\n排序后的销售手机信息为:\n");
printf("\n手机编号 手机型号 品牌 售价 数量 销售日期(年月日) \n");
for(i=0;i<sn;i++)
{
printf("%-11s %-10s%-10s %.2f %d %d %d %d ",sale[i].ID,sale[i].modle,sale[i].brand,sale[i].sprice,sale[i].num,sale[i].sale_time.year,sale[i].sale_time.month,sale[i].sale_time.day);
printf("\n");
}
printf("\n按任意键继续!\n");
getch();
}
根据以上.c代码创建一个qt项目,并给出其完整的运行代码和ui界面设计