该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
struct xuesheng
{
int xuehao;
char name[40];
float jine;
float zonge;
struct xuesheng *next;
};
float *p;
typedef struct xuesheng list;
typedef list * liebiao;
liebiao head=NULL,last=NULL,head1=NULL;
int enter(void);
void paidui(void);
void maifan(void);
void chongzhi(void);
void chazhao(void);
void shanchu(void);
void xianshi(liebiao xinxi);
int enter(void);
void caidan(liebiao head);
void jiaohuan(float *a,float *b);
void paixu(void);
void paidui(void)//排队
{
liebiao xinxi=NULL;
xinxi=malloc(sizeof(list)); /*分配结点内存*/
if(xinxi!=NULL)
{ /*插入结点*/
if (head==NULL)
{ /*若创建的是头结点*/
head=xinxi;
last=xinxi;
}
else
{
last->next=xinxi; /*将结点连上链表尾结点*/
last=xinxi; /*使last指向当前链表的最后一个结点*/
}
printf("输入学号\n");
scanf("%d",&xinxi->xuehao);
printf("输入姓名\n");
getchar();
gets(xinxi->name);
printf("输入金额\n");
scanf("%f",&xinxi->jine);
printf("输入消费总额\n");
scanf("%f",&xinxi->zonge);
p=&xinxi->zonge;
}
last->next=NULL;/*设置链表结束标记*/
}
void maifan(void)//买饭,并将第一个节点删掉
{
liebiao xinxi=NULL;
printf("买饭成功,退出队伍");
if(head->next!=NULL)
{
xinxi=head->next;
head=xinxi;
}
else
{
head =NULL;
}
}
void chongzhi(void)//充值
{
int i;
printf("请输入您要充值的金额:\n");
scanf("%d",&i);
head->jine=head->jine+i;
}
void chazhao(void)//查找并打印
{
liebiao xinxi;
int xuehao1;
xinxi=head;
printf("请输入要查询的学号:\n");
scanf("%d",&xuehao1);
while(xinxi!=NULL && xinxi->xuehao!=xuehao1)
{
xinxi=xinxi->next;
}
if(xinxi==NULL)
{
printf("队列中无这名同学");
}
else
{
printf("%-16s%-16s%-11s%10s\n","学号","姓名","金额","消费总额");
printf("%-16d%-16s%-11.2f%10.2f\n",xinxi->xuehao,xinxi->name,xinxi->jine,xinxi->zonge);
}
}
void jiaohuan(float *a,float *b)
{
float *i;
if(*a
i=a;
a=b;
b=i;
}
void paixu(void)
{
paidui();
if(p==NULL)
{
printf("当前没人在排队\n");
}
else
{
jiaohuan(p,p+1);
p=p+1;
while(p!=NULL)
{
printf("%f",p);
}
}
} ;
void shanchu(void) //查找并删除
{
liebiao zq,xinxi;
int xuehao1;
zq=NULL;
xinxi=head; /*将头接点地址赋给xinxi*/
printf("请输入要删除的学号:\n");
scanf("%d",&xuehao1); /*查找待删除结点*/
while (xinxi!=NULL && xinxi->xuehao!=xuehao1)
{
zq=xinxi;
xinxi=xinxi->next;
}
if (xinxi!=NULL)
{ /*如果找到要删除的结点*/
if (zq==NULL) /*删除的是头结点*/
head=xinxi->next; /*更新头结点*/
else /*删除的是中间结点或者尾结点*/
zq->next= xinxi->next;
free(xinxi); /*释放结点内存*/
}
else
printf("队列中无这名同学"); //没有找到符合条件的结点
}
void xianshi(liebiao xinxi) //打印
{
if (xinxi==NULL)
printf("当前没人在排队\n");
else
{
printf("%-16s%-16s%-11s%10s\n","学号","姓名","金额","消费总额");
while(xinxi!=NULL)
{
printf("%-16d%-16s%-11.2f%10.2f\n",xinxi->xuehao,xinxi->name,xinxi->jine,xinxi->zonge);
xinxi=xinxi->next;
}
}
}
int enter(void)
{
int menuChoice;
printf("\n请选择下面的一个项目\n"
"1.排队\n"
"2.打饭\n"
"3.充值\n"
"4.查询\n"
"5.删除\n"
"6.按消费总额排序\n"
"7.显示\n"
"8.退出\n");
scanf("%d",&menuChoice);
return menuChoice; //返回对应的选项序号
}
void caidan(liebiao head) //释放内存
{
liebiao temp;
while (head!=NULL)
{
temp=head;
head=head->next;
free(temp);
}
}
int main()
{
int choice;
while((choice=enter())!=8)
{
switch(choice)
{
case 1:
paidui();
break;
case 2:
maifan();
break;
case 3:
chongzhi();
break;
case 4:
chazhao();
break;
case 5:
shanchu();
break;
case 6:
paixu();
break;
case 7:
xianshi(head);
break;
}
}
caidan(head); //选择功能
system("pause");
return 0;
}