本文实例为大家分享了C语言实现电话订餐管理系统的具体代码,供大家参考,具体内容如下
这是我C语言课程设计的题目。非常奇怪啊,下面的代码能在C-Free中跑起来,却没办法在vc++6.0中跑起来。可能是编译器支持的标准不一样。不管他,反正老师不会把我的代码打一遍,然后放到vc中去运行。
实现了4个功能:添加、查找、修改、删除,同时会把信息写入到同一目录下的customer.dat文件中。(这个文件需要手动建立,没有建立的话程序会不运行。)。
能力有限,错误在所难免,欢迎指出。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
void PrintMenu(); // 声明主界面函数
void AddCustomerInfo(); // 声明添加顾客订餐信息的函数
void ModifyCustmoerInfo(); // 声明修改顾客订餐信息的函数,记得加参数
void DeleteCustomerInfo(); // 声明删除顾客订餐信息的函数,记得加参数
int searchdata();// 查找顾客订餐信息并返回值
void SearchCustomerInfo();// 声明查询顾客订餐信息的函数,记得加参数
void ViewAllInfo(); // 声明预览全部订餐信息的函数,记得加参数
void ColorChange(int); // 声明修改背景&字体颜色的函数
void Cutline(); // 声明分界线函数
int Unix2Time();// 声明时间戳转换为普通时间的函数
void Time2Unix(time_t,char,char []);// 声明普通时间转换为时间戳的函数
void GetAllInfo();//获取所有顾客的全部信息
void SetConsolSize(int x,int y);//定义修改缓冲区大小的函数
static int n=0;// 定义一个全局变量n用来获取总共有多少顾客信息
// 声明一个顾客的结构体变量
struct Customer
{
char no[15];
char name[20];
char phoneNumber[20];
char booktime[40];
int num;
char other[200];
char ordertime[40];
}customer[100],custmp;
int main()
{
int choice;
SetConsoleTitle("电话订餐系统");
GetAllInfo();
system("mode con cols=150 lines=40");// 调用cmd命令修改窗口大小
SetConsolSize(150,999);//修改缓冲区的大小
printf("欢迎使用电话订餐系统!\n");
printf("请输入菜单前标号以执行操作\n");
PrintMenu:
PrintMenu();
//ColorChange(5);
GetChoice:
fflush(stdin);
choice=-1;//重置choice的值
printf("\n请输入你的选项 >");
scanf("%d",&choice);
fflush(stdin); // 清空缓冲区,防止scanf接受多余的回车导致死循环
switch(choice)
{
case 1:AddCustomerInfo();break;
case 2:ModifyCustmoerInfo();break;
case 3:DeleteCustomerInfo();break;
case 4:SearchCustomerInfo();break;
case 5:ViewAllInfo();break;
case 6:goto PrintMenu;break;
case 0:exit(0);
default:{
Cutline();
ColorChange(4);
printf("输入错误!请重新输入!\n");
ColorChange(-1);
Cutline();
}
}
goto GetChoice;
}
void PrintMenu()//打印菜单函数
{
printf("┏━━━━━━━━━━━━━━━━┓\n");
printf("┃ 0. 退出本系统 ┃\n");
printf("┃ 1. 录入订餐信息┃\n");
printf("┃ 2. 修改订餐信息┃\n");
printf("┃ 3. 删除订餐信息┃\n");
printf("┃ 4. 查询订餐信息┃\n");
printf("┃ 5. 预览订餐信息┃\n");
printf("┃ 6. 显示菜单 ┃\n");
printf("┗━━━━━━━━━━━━━━━━┛\n");
}
void ColorChange(int color)//改变字体颜色函数
{
HANDLE SELF = GetStdHandle(STD_OUTPUT_HANDLE);
if(color==-1)
SetConsoleTextAttribute(SELF,7);
SetConsoleTextAttribute(SELF,color);
}
void Cutline()//显示一条分割线
{
printf("————————————\n");
}
void AddCustomerInfo()//追加一条顾客的信息
{
FILE *fp;
Cutline();
//尝试打开顾客数据文件 customer.dat
if((fp=fopen(".\\customer.dat","rb"))==NULL)
{
ColorChange(4);
printf("打开顾客数据文件失败!\n");
//printf("写入顾客信息失败!");
ColorChange(7);
Cutline();
return;
}
//输入顾客的订餐信息
printf("请输入顾客姓名 >");
scanf("%[^\n]s",custmp.name);
fflush(stdin); //清空缓冲区
printf("请输入顾客电话 >");
scanf("%s",custmp.phoneNumber);
fflush(stdin);
printf("请输入顾客的预定时间 >");
scanf("%[^\n]s",custmp.booktime);
fflush(stdin);
printf("请输入用餐的人数 >");
scanf("%d",&custmp.num);
fflush(stdin);
printf("请输入顾客的备注 >");
scanf("%[^\n]s",custmp.other);
fflush(stdin);
// 生成以时间为编号的顾客编号
time_t rawtime;
time(&rawtime);
Time2Unix(rawtime,'t',custmp.ordertime);
Time2Unix(rawtime,'n',custmp.no);
fclose(fp);
//将顾客的数据文件写入到 customer.dat中去
fp=fopen(".\\customer.dat","ab");
fwrite(&custmp,sizeof(struct Customer),1,fp);
fclose(fp);
Cutline();
}
void ModifyCustmoerInfo()//修改顾客订餐信息
{
char target[40];
int no,choice;
long int movesize;
no=searchdata();
printmenu:
printf("\n查询到下列顾客信息:\n");
printf("\n编号\t\t姓名\t\t电话\t\t用餐人数 预定日期\t\t\t下单日期\t\t\t备注\n");
ColorChange(240);
printf("%-16s",customer[no].no);
printf("%-16s",customer[no].name);
printf("%-16s",customer[no].phoneNumber);
printf("%-11d",customer[no].num);
printf("%-30s",customer[no].booktime);
printf("%-31s",customer[no].ordertime);
printf("%-39s\n",customer[no].other);
ColorChange(-1);
printf("┏━━━━━━━━━━━━━━┓\n");
printf("┃0.结束修改 ┃\n");
printf("┃1.姓名 ┃\n");
printf("┃2.电话 ┃\n");
printf("┃3.用餐人数 ┃\n");
printf("┃4.预定日期 ┃\n");
printf("┃5.备注 ┃\n");
printf("┃6.重新选择顾客┃\n");
printf("┗━━━━━━━━━━━━━━┛\n");
GetModifiedInfo:
Cutline();
printf("\n请选择你要修改的项目 >");
scanf("%d",&choice);
//菜单分支
switch(choice)
{
case 1:{
printf("请输入更正后的内容 >");
scanf("%s",customer[no].name);
goto WriteCustData;
}break;
case 2:{
printf("请输入更正后的内容 >");
scanf("%s",customer[no].phoneNumber);
goto WriteCustData;
}break;
case 3:{
printf("请输入更正后的内容 >");
scanf("%d",&customer[no].num);
goto WriteCustData;
}break;
case 4:{
printf("请输入更正后的内容 >");
scanf("%s",customer[no].booktime);
goto WriteCustData;
}break;
case 5:{
printf("请输入更正后的内容 >");
scanf("%s",customer[no].other);
goto WriteCustData;
}break;
case 6:{
no=searchdata();
goto printmenu;
}
case 0:return;
default:{
ColorChange(4);
printf("输入错误!");
ColorChange(-1);
goto GetModifiedInfo;
}break;
}
//将要修改的顾客信息定点在customer.dat文件中覆盖修改
WriteCustData:
movesize=no*sizeof(struct Customer);
printf("movesize is %d\n",movesize);
FILE *fp;
fp=fopen(".\\customer.dat","r+");
rewind(fp);
fseek(fp,1L*(movesize),0);
fwrite(&customer[no],sizeof(struct Customer),1,fp);
fclose(fp);
goto GetModifiedInfo;
}
void DeleteCustomerInfo()
{
int i,no;
no=searchdata();
char choice;
FILE *fp;
printf("\n查询到下列顾客信息:\n");
printf("\n编号\t\t姓名\t\t电话\t\t用餐人数 预定日期\t\t\t下单日期\t\t\t备注\n");
ColorChange(240);
printf("%-16s",customer[no].no);
printf("%-16s",customer[no].name);
printf("%-16s",customer[no].phoneNumber);
printf("%-11d",customer[no].num);
printf("%-30s",customer[no].booktime);
printf("%-31s",customer[no].ordertime);
printf("%-39s\n",customer[no].other);
ColorChange(-1);
ColorChange(4);
printf("\n是否删除这个用户的数据?(y/n) >");
fflush(stdin);
scanf("%c",&choice);
ColorChange(7);
if(choice=='n'||choice=='N')
{
printf("\n返回主菜单...\n");
return;
}
if(choice=='y'||choice=='Y')
{
GetAllInfo();
fp=fopen(".\\customer.dat","wb");
fclose(fp);
fp=fopen(".\\customer.dat","ab");
printf("%d,%d",n,no);
for(i=0;i<=(n-1);i++)
{
if(i==no)
continue;
fwrite(&customer[i],sizeof(struct Customer),1,fp);
}
fclose(fp);
}
}
int searchdata()//根据所给的条件寻找对应的顾客i
{
GetAllInfo();
char target[100];
printf("\n请输入用户任意单项信息 >");
scanf("%s",target);
int i,res1,res2,res3;
for(i=0;i<=(n-1);i++)
{
res1=memcmp(target,customer[i].no,strlen(customer[i].no));
res2=memcmp(target,customer[i].name,strlen(customer[i].name));
res3=memcmp(target,customer[i].phoneNumber,strlen(customer[i].phoneNumber));
if(!(res1&&res2&&res3))
return i;
}
return -1;
}
void SearchCustomerInfo()
{
int no=searchdata();
printf("\n查询到下列顾客信息:\n");
printf("\n编号\t\t姓名\t\t电话\t\t用餐人数 预定日期\t\t\t下单日期\t\t\t备注\n");
ColorChange(240);
printf("%-16s",customer[no].no);
printf("%-16s",customer[no].name);
printf("%-16s",customer[no].phoneNumber);
printf("%-11d",customer[no].num);
printf("%-30s",customer[no].booktime);
printf("%-31s",customer[no].ordertime);
printf("%-100s\n",customer[no].other);
ColorChange(-1);
}
void GetAllInfo()//获取所有顾客的全部信息函数
{
n=0;
FILE *fp;
fp=fopen(".\\customer.dat","rb");
do
{
fread(&customer[n],sizeof(struct Customer),1,fp);
//if(customer[n].no[0]=='\0')
// break;
n++;
}while(feof(fp)==0);
n=n-1;
fclose(fp);
}
void ViewAllInfo()
{
GetAllInfo();
printf("n is %d",n);
int i=0,flag=1;
printf("\n编号\t\t姓名\t\t电话\t\t用餐人数 预定日期\t\t\t下单日期\t\t\t备注\n");
while(i<=(n-1))
{
if(flag)
{
ColorChange(240);
flag=0;
}else{
ColorChange(7);
flag=1;
}
printf("%-16s",customer[i].no);
printf("%-16s",customer[i].name);
printf("%-16s",customer[i].phoneNumber);
printf("%-11d",customer[i].num);
printf("%-30s",customer[i].booktime);
printf("%-31s",customer[i].ordertime);
printf("%-100s\n",customer[i].other);
++i;
}
ColorChange(-1);
putchar('\n');
}
void Time2Unix(time_t Timestamp,char transfer_type,char Transfer_Time[])
{
char Time1[40];//声明原时间
struct tm* timeinfo;
if(transfer_type=='t')//如果 transfer_type 为 x,则返回的时间格式为易阅读的
{
timeinfo=localtime(&Timestamp);
strftime(Time1,sizeof(Time1),"%Y年%m月%d日%H时%M分%S秒",timeinfo);
}
if(transfer_type=='n')// //如果 transfer_type 为 n,则返回的时间格式为纯数字
{
timeinfo=localtime(&Timestamp);
strftime(Time1,sizeof(Time1),"%Y%m%d%H%M%S",timeinfo);
}
strcpy(Transfer_Time,Time1);//将转换后的时间格式复制到传递过来的数组当中去
}
void SetConsolSize(int x,int y)// 设置缓冲区的大小
{
SMALL_RECT winPon={0,0,25,10};
HANDLE con=GetStdHandle(STD_OUTPUT_HANDLE);
COORD buf={x,y};// 缓冲区长10000,高25
SetConsoleScreenBufferSize(con,buf);
}
每个功能的测试:
1、录入选项
2、删除选项
3、查询选项
4、修改选项
5、 预览全部信息
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。