课程设计已经一周了,无形之间对c语言的了解更进一步。
课程设计的题目是电话订餐系统,除了原有的查询删除插入查找修改五个功能外,自己又试着添加了几个功能,例如按照时间对客户进行排序,进行文件的保存与输出。第一次操作的时候居然报了66个错误,让我简直无法接受,一度怀疑自己的编程能力出现了问题。随着逐步的调试,渐渐明白一个真理:“”没有对指针和链表的深入了解不足以说明你学过c语言。“”很多大一的同学和我说不知道怎么锻炼自己的编程能力,书上的编程又过于简单(谭浩强那一本)。现在我可以告诉你们答案啦!!!你们大可以先实战后看书(不是让你啥都不会就去编程,而是在有一定基础上去尝试完成一个小项目),当项目输出成功的那一刻,你会感到无比的满足。
马上就要进行课设考试了,抽出时间来发这篇博文也是为了向大一学弟学妹们传授一些经验。大可对我的代码进行改编与整理。(注释掉的代码纯属练手和查错)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct guest
{
int number;
char name[10];
int sum;
char time[5];
struct guest *next;
}GuestLink,*Pointer;
GuestLink stu[10];
int i,j,k;
void Insert(Pointer *Head);
void Search(Pointer Head);
void Update(Pointer Head);
void Delete(Pointer *Head);
void Show(Pointer Head);
void Sort(Pointer Head);
void Save(Pointer Head);
void Put(Pointer Head);
int main()
{
Pointer Head=NULL;
int i;
do{
printf("\n");
printf("1---增加订餐客户信息\n");
printf("2---查询订餐客户信息\n");
printf("3---修改订餐客户信息\n");
printf("4---删除订餐客户信息\n");
printf("5---浏览客户订餐信息\n");
printf("6---按照用餐时间升序排序\n");
printf("7---保存订餐信息到数据文件\n");
printf("8---查看数据文件中的订餐信息\n");
printf("9---退出\n");
printf("\n\n");
printf("请选择1--9:");
scanf("%d",&i);
switch(i)
{
case 1:Insert(&Head);
break;
case 2:Search(Head);
break;
case 3:Update(Head);
break;
case 4:Delete(&Head);
break;
case 5:Show(Head);
break;
case 6:Sort(Head);
break;
case 7:Save(Head);
break;
case 8:Put(Head);
break;
case 9:
break;
default:printf("选择错误!请重新选择!");
break;
}
}while(i!=9);
return 0;
}
void Insert(Pointer *Head)
{
int in_number;
Pointer p,q,r;
printf("请输入编号:\n");
scanf("%d",&in_number);
p=q=*Head;
while(p!=NULL)
{
if(p->number==in_number)
{
printf("已经有相同编号:");
return;
}
else
{
q=p;p=p->next;
}
}
r=(Pointer)malloc(sizeof(GuestLink));//没有*号
r->next=NULL;
if(r==NULL)
{
printf("分配空间失败");
return;
}
if(q==NULL)//如果是空表,判断空表用q!!!!
*Head=r;
else
{q->next=r;}
r->number=in_number;
printf("请输入姓名:\n");
scanf("%s",r->name);
printf("请输入人数:\n");
scanf("%d",&r->sum);
printf("请输入时间:\n");
scanf("%s",r->time);
}
/*
void Insert(Pointer *Head)
{int in_number;
Pointer p,q,r;
p=q=*Head;
printf("请输入号码:");
scanf("%d",&in_number);
while(p!=NULL)
{
if(in_number==p->number)
{printf("已存在号码!");}
else
{q=p;p=p->next;}
}
r=(Pointer)malloc(sizeof GuestLink);
r->next=NULL;
if(q==NULL)
*Head=r;
else
q->next=r;
printf("请输入姓名:");
scanf("%s",r->name);
printf("请输入人数");
scanf("%f",&r->sum);
printf("请输入时间");
scanf("%s",r->time);
}*/
void Search(Pointer Head)
{
int flag=1;
int number;
Pointer p;
printf("请输入要查询的编号:");
scanf("%d",&number);
p=Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{ printf("编号\t姓名\t人数\t时间\n");
printf("%s\t",p->name);
printf("%d\t",p->sum);
printf("%s\t\n",p->time);
flag=0;
}
else
p=p->next;
}
if(flag)
printf("没有查询到!");
}
/*
void Search(Pointer Head)
{
int flag=0;
int number;
Pointer p;
p=Head;
printf("请输入您要查找的编号:");
scanf("%f",&number);
while(p!=NULL&&flag)
{
if(p->number==number)
{
printf("已查询到您要的编号");
flag=0;
}
else
{
p=p->next;
}
}
if(flag==1)
{printf("姓名:%s",p->name);
printf("编号:%f",p->number);
printf("人数:%f",p->sum);
printf("时间:%s",p->time);
}
else
{printf("没有查询到您要查询的编号!");}
}
*/
void Update(Pointer Head)
{
int flag=1;
int number;
Pointer p;
printf("请输入要修改的编号:");
scanf("%d",&number);
p=Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{
printf("请输入人数:");
scanf("%d",&p->sum);
printf("请输入用餐时间:");
scanf("%s",p->time);
flag=0;
}
else
p=p->next;
}
if(flag)
printf("没有找到要修改的记录!");
}
//update与查询过程相似!!!
void Delete(Pointer *Head)
{
int flag=1;
int number;
Pointer p,q;
printf("请输入要删除的数据编号:");
scanf("%d",&number);
p=q=*Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{
if(p==*Head)
{
*Head=p->next;free(p);//删除结点后要及时释放内存!!!
}
else
{q->next=p->next;free(p);}
flag=0;
}
else
{q=p;p=p->next;}
}
if(flag)
printf("没有找到可以删除的数据!!");
}
/*
void Delete(Pointer *Head)
{
Pointer p,q;
p=q=*Head;
int number;
int flag=1;
printf("请输入您要删除的结点:");
scanf("%d",&number);
while(p!=NULL)
{
if(p->number==number)
{ if(p==*Head)
{
*Head=p->next;free(p);
}
else
{
q->next=p->next;free(p);
}
flag=0;
}
else
{
q=p;p=p->next;
}
}
if(flag)
{printf("没有找到要删除的数据!");}
}
*/
void Show(Pointer Head)
{
Pointer p;
p=Head;
printf("编号\t姓名\t人数\t用餐时间\n");
while(p!=NULL)
{
printf("%d\t",p->number);
printf("%s\t",p->name);
printf("%d\t",p->sum);
printf("%s\t\n",p->time);
p=p->next;
}
}
void Sort(Pointer Head)
{
//三个for循环,第一个赋给结构数组 第二个排序,第三个输出
Pointer p;
p=Head;
int count=0;
GuestLink temp;
for(i=0;p!=NULL;i++)
{
strcpy(stu[i].name,p->name);
stu[i].number=p->number;
stu[i].sum=p->sum;
strcpy(stu[i].time,p->time);
count++;
p=p->next;
}
for(i=0;i<count-1;i++)
{
k=i;
for(j=i+1;j<count;j++)
if(strcmp(stu[j].time,stu[k].time)<0)k=j;
if(k!=i)
{temp=stu[i];stu[i]=stu[k];stu[k]=temp;}//一个字都不能改!!!!
//{temp=stu[k];stu[k]=stu[i];stu[i]=temp;}
}
printf("编号\t姓名\t人数\t用餐时间\n");
for(i=0;i<count;i++)
{
printf("%d\t",stu[i].number);
printf("%s\t",stu[i].name);
printf("%d\t",stu[i].sum);
printf("%s\t\n",stu[i].time);
}
}
/*Head=p=stu;
while(p!=NULL)
{
printf("姓名:%-10s",p->name);
printf("人数:%-10d",p->sum);
printf("用餐时间:%-10s",p->time);
printf("编号:%-10d\n",p->number);
p=p->next;
}*/
/*
void Sort(Pointer Head)
{
Pointer p;
p=Head;
GuestLink temp;
count=0;
while(p!=NULL)
{p=p->next;
count++;
}
p=Head;
while(p!=NULL)
{for(i=0;i<count;i++)
{
stu[i].number=p->number;
strcpy(stu[i].name,p->name);
stu[i].sum=p->sum;
strcpy(stu[i].time,p->time);
}
p=p->next;
}
for(i=0;i<count-1;i++)
{
k=i;
for(j=0;j<count;j++)
{if(strcmp(stu[j].time,stu[k].time)<0)k=j;
if(k!=i)
{temp=stu[k];stu[k]=stu[i];temp=stu[i];}
}
}
}
*/
void Save(Pointer Head)
{
Pointer p;
FILE *fp;
p=Head;
for(i=0;p!=NULL;i++)
{
strcpy(p->name,stu[i].name);
p->number=stu[i].number;
p->sum=stu[i].sum;
strcpy(p->time,stu[i].time);
p=p->next;
}
if((fp=fopen("stud","w"))==NULL)
{printf("can't open !");}
p=Head;
while(p!=NULL)
{
if(fwrite(p,sizeof(GuestLink),1,fp)!=1)
printf("can't write!\n");
p=p->next;
}
fclose(fp);
}
/*
void Save(Pointer Head)
{
FILE *fp;
Pointer p;
p=Head;
for(i=0;p!=NULL;i++)
{
stu[i].number=p->number;
strcpy(stu[i].name,p->name);
stu[i].sum=p->sum;
strcpy(stu[i].time,p->time);
p=p->next;
}
p=Head;
if((fp=fopen("stud","w"))==NULL)
{
printf("cam't open the file");
}
for(i=0;i<count;i++)
if(fwrite(p,sizeof(GuestLink),1,fp)!=1)
{
printf("cant write");
}
fclose(fp);
}
*/
void Put(Pointer Head)
{
FILE *fp;
Pointer p;
p=Head;
if((fp=fopen("stud","r"))==NULL)
{printf("can't open the File\n");}
printf("编号\t姓名\t人数\t用餐时间\n");
while(p!=NULL)
{
if(fread(p,sizeof(GuestLink),1,fp)!=1)
{printf("can't read!");}
printf("%d\t",p->number);
printf("%s\t",p->name);
printf("%d\t",p->sum);
printf("%s\t\n",p->time);
p=p->next;
}
fclose(fp);
}