运行时,没有错误,但不显示结果。输出时密码和身份证的第一个字符不显示。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN sizeof(LNode)
#include <iostream>
using namespace std;;
int seat;
typedef struct LNode //客户账户结点
{
int number; //账号
char name[20]; //姓名
char key[20]; //密码
char ID[20]; //身份证号
double money; //余额
double telenum; //电话号码
struct LNode *next;//记录下一个空间地址
}LNode,*LinkList;
void printList(LinkList L)
{ // 打印头结点地址为L的客户账户表
LinkList p=L;////
int n=1;
printf("\n ---------------------------------------\n");
printf(" 账号 姓名 密码 身份证号 余额 电话号码\n");
printf(" ----------------------------------------\n");
if(L==NULL || L->next==NULL)
printf("该客户账户表中没有元素\n");
else
while(p->next !=NULL)
{
printf(" %2d %-9d",n,p->next->number);
printf(" %-5s",p->next->name);
printf(" %-20s",p->next->key);
printf(" %-20s",p->next->ID);
printf(" %.0f",p->next->money);
printf(" %.0f\n",p->next->telenum);
p=p->next;
n++;
}
printf(" ----------------------------------------\n");
return ;
}//end
LinkList prior(LinkList L,LinkList p)
{ // 查找位于当前地址元素的前一元素的地址
LinkList p_prior=L;
if(L->next==NULL)
return(L);
while(p_prior->next != p)
{
p_prior=p_prior->next;
}
return (p_prior);
}
void insertYouXu(LinkList L,LinkList Elem)
{ //插入一个元素,使原有序表仍为有序
LinkList p=L->next;
while(p!=NULL && Elem->number>=p->number)
{
if(p->number==Elem->number)
{
printf("重复输入!!\n");return;
}
p=p->next;
}
//确定Elem插入的位置
if(p==NULL)
{
p=prior(L,p); Elem->next=NULL;p->next=Elem;
}
else //若为空表,插到头结点之后
{
p=prior(L,p); Elem->next=p->next; p->next=Elem;
}
}
LinkList creatIncreLink()
{//创建一个存放客户账户表成员的非递减有序表,返回头结点地址
char ID[20]; //身份证号
char key[20]; //密码
double money; //余额
int num=1,number;
double telenum;
char name[20],temp1,temp2,temp3;
LinkList L,p;
L=(LinkList)malloc(LEN); //头结点
L->next=NULL;
printf("请输入账号、姓名、密码、身份证号、余额和电话号码,建立客户账号表,以'-1'为输入结束标志\n");
printf("请输入账号 %d:",num);
scanf("%d",&number);
printf("请输入姓名 %d: ",num);
temp1=getchar(); gets(name);
printf("请输入密码 %d: ",num);
temp2=getchar(); gets(key);
printf("请输入身份证号 %d: ",num);
temp3=getchar(); gets(ID);
printf("请输入余额 %d: ",num);
scanf("%lf",&money);
printf("请输入电话号码 %d:",num);
scanf("%lf",&telenum);
while(number>=0)
{
p=(LinkList)malloc(LEN); //新结点
p->number=number;
strcpy(p->name,name);
strcpy(p->key,key);
strcpy(p->ID,ID);
p->money=money;
p->telenum=telenum;
insertYouXu(L,p); //有序的插入新结点
num++;
printf("请输入账号 %d:",num);
scanf("%d",&number);
printf("请输入姓名 %d: ",num);
temp1=getchar(); gets(name);
printf("请输入密码 %d: ",num);
temp2=getchar(); gets(key);
printf("请输入身份证号 %d: ",num);
temp3=getchar(); gets(ID);
printf("请输入余额 %d: ",num);
scanf("%lf",&money);
printf("请输入电话号码 %d:",num);
scanf("%lf",&telenum);
}
return(L);
}
void deleteElem(LinkList L,int i)
{ //从客户账号表中删除第i个元素
LinkList p=L,q;//////
int j=0;
while (p->next && j<i-1)
{
p = p->next;j++;
}
if(!(p->next)) //判断i是否合法,i既不能大于元素的个数,也不能小于等于0
{
printf("第%d个元素删除失败\n",i);
return ;
}
q = p->next;
p->next = q->next;
free(q); //释放删除的结点
}
int searchNum(LinkList L,int n)
{ // 按账号查找客户
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL) printf("该链表中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(p->number<=n)
if(p->number==n)
{
flag=1;
printf("要查找的是第%d位通讯者:\n",seat);
printf(" 账号: %d 姓名: %s 密码:%s 身份证号:%s 余额:%.0f 电话号码:%.0f\n",p->number,p->name,p->key,p->ID,p->money,p->telenum);
}
p=p->next;seat++;//!!!!
}
}
return flag;
}
int changeNum(LinkList L,int n)
{ // 按账号修改客户
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL) printf("该链表中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(p->number<=n)
if(p->number==n)
{
flag=1;
}
p=p->next;seat++;//!!!!
}
}
return flag;
}
int searchName(LinkList L,char n[])
{ // 按姓名查找客户
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL||L==NULL)
printf("该通讯录中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(!strcmp(p->name,n))
{
flag=1;
printf("要查找的是第%d位客户:\n",seat);
printf(" 账号: %d 姓名: %s 密码:%s 身份证号:%s 余额:%d 电话号码:%.0f\n",p->number,p->name,p->key,p->ID,p->money,p->telenum);
}
p=p->next;seat++;//!!!!!
}
}
return flag;
}
int searchID(LinkList L,char n[])
{ // 按身份证号查找客户
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL||L==NULL)
printf("该通讯录中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(!strcmp(p->ID,n))
{
flag=1;
printf("要查找的是第%d位客户:\n",seat);
printf(" 账号: %d 姓名: %s 密码:%s 身份证号:%s 余额:%d 电话号码:%.0f\n",p->number,p->name,p->key,p->ID,p->money,p->telenum);
}
p=p->next;seat++;//!!!!!
}
}
return flag;
}
int delNum(LinkList L,int n)
{ // 按账号删除客户
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL)
printf("该链表中没有元素,删除失败\n");
else
{
while(p !=NULL)
{
if(p->number<=n)
{
if(p->number==n)
{
flag=1;
printf("%d ",p->number);
p=p->next;
deleteElem(L,seat);
}
}
else {p=p->next;seat++;}
}
printf("被删除\n");
}
return flag;
}
int delID(LinkList L,char n[])
{ // 按身份证号删除客户
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL)
printf("该链表中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(!strcmp(p->ID,n))
{
flag=1;
printf("%s ",p->ID);
p=p->next;
deleteElem(L,seat);
}
else {p=p->next;seat++;}
}
if(flag)printf("被删除\n");
}
return flag;
}
int delName(LinkList L,char n[])
{ // 按姓名删除客户
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL)
printf("该链表中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(!strcmp(p->name,n))
{
flag=1;
printf("%s ",p->name);
p=p->next;
deleteElem(L,seat);
}
else {p=p->next;seat++;}
}
if(flag)printf("被删除\n");
}
return flag;
}
int changeName(LinkList L,char n[])
{ // 修改客户姓名
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL)
printf("该链表中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(!strcmp(p->name,n))
{
flag=1;
printf("%s ",p->name);
p=p->next;
deleteElem(L,seat);
}
else {p=p->next;seat++;}
}
if(flag)printf("被修改\n");
}
return flag;
}
int main(void)
{
LinkList L=NULL,p;
int flag=0,menu;
char temp;
system("color 1f");
printf("\n ***************** ^@^欢迎使用客户账号管理系统***********\n");
printf(" * 1 客户账户表的建立 *\n");
printf(" * 2 插入客户账户记录 *\n");
printf(" * 3 查询客户账户记录 *\n");
printf(" * 4 删除客户账户记录 *\n");
printf(" * 5 修改客户账户记录 *\n");
printf(" * 6 显示客户账户表信息 *\n");
printf(" * 0 退出管理系统 *\n");
printf(" **************** ^@^欢迎使用客户账号管理系统************\n");
printf("请选择0-6:");
scanf("%d",&menu);
while(menu!=0)
{
switch(menu)
{
case 1:
{
L=creatIncreLink();
printf("建立客户账户表:");
printList(L);
flag=1;
break;
}
case 2:
{
if(flag==1)
{
char ID[20]; //身份证号
char key[20]; //密码
//double money; //余额
int number,telenum,money;
//double telenum;
char name[20],temp1,temp2,temp3;
LinkList L,p;
printf("请输入客户的账号、姓名、密码、身份证号、余额和电话号码\n");
printf("请输入账号:");
scanf("%d",&number);
cout<<"请输入姓名:";//printf("请输入姓名: ");
cin>>name;
//temp1=getchar(); gets(name);
cout<<"请输入密码:";//printf("请输入密码: ");
cin>>key;
//temp2=getchar(); gets(key);
cout<<"请输入身份证号:";//printf("请输入身份证号: ");
cin>>ID;
//temp3=getchar(); gets(ID);
printf("请输入余额:");
scanf("%d",&money);
printf("请输入电话号码:");
scanf("%d",&telenum);
p=(LinkList)malloc(LEN); //新结点
p->number=number;
strcpy(p->name,name);
strcpy(p->key,key);
strcpy(p->ID,ID);
p->money=money;
p->telenum=telenum;
insertYouXu(L,p); //有序的插入新结点
printf("插入后:");
printList(L);
}//endif
else printf("\nERROR: 客户账户表还没有建立,请先建立客户账户表\n");
break;
}//endcase2
case 3:
{
int way,n,num;
char na[20],temp1,temp2;
char ID[20];
int s;
if(L!=NULL)
{
if(flag)
{
printf("选择查找方式:\n");
printf(" 1.按账号 2.按姓名 3.按身份证号\n");
scanf("%d",&way);
if(way==1)
{
printf("\n请输入账号:");
scanf("%d",&n);
s=searchNum(L,n);
if(s==0) printf("无此客户,查找失败!\n");
break;
}
if(way==2)
{
printf("\n请输入姓名:");
temp1=getchar(); gets(na);
s=searchName(L,na);
if(s==0) printf("无此客户,查找失败!\n");
break;
}
if(way==3)
{
printf("\n请输入身份证号:");
temp2=getchar(); gets(ID);
s=searchID(L,ID);
if(s==0) printf("无此客户,查找失败!\n");
}
else printf("客户账户表中无记录!\n");
}
break;
}
else printf("客户账户表中无记录!请先建立客户账号表\n");
break;
}//endcase3
case 4:
{
int way;
char temp; ////
printf("选择删除方式:1.按序号 2. 按账号 3.按姓名 4.按身份证号 \n");
scanf("%d",&way);
if(way==1)
{
int n;
printf("请输入客户序号: ");
scanf("%d",&n);
printf("删除后:\n");
deleteElem(L,n);
printList(L);
}
else if(way==2)
{
int n,f;
printf("请输入账号: ");
scanf("%d",&n);
f=delNum(L,n);
if(f!=0)
{
printf("删除后:\n");
printList(L);
}
else printf("无该客户,删除失败!\n");
}
else if(way==3)
{
char na[20],temp;
int f;
printf("\n请输入姓名:");
temp=getchar(); gets(na);
f=delName(L,na);
if(f!=0)
{
printf("删除后:\n");
printList(L);
}
else printf("无该客户,删除失败!\n");
}
else if(way==4)
{
char ID[20],temp;
int f;
printf("\n请输入身份证号:");
temp=getchar(); gets(ID);
f=delID(L,ID);
if(f!=0)
{
printf("删除后:\n");
printList(L);
}
else printf("无该客户,删除失败!\n");
}
else printf("ERROR!!\n");
break;
}//endcase4
case 5:
{
int way,n,num,number,telenum,number1,telenum1;
char name[20],temp1,temp2,name1[20];
char ID[20],ID1[20];
char key[20],key1[20];
int s;
LinkList L,p;
if(L!=NULL)
{
if(flag)
{
printf("选择修改内容:\n");
printf(" 1.姓名 2.密码 3.身份证号 4.电话号码\n");
scanf("%d",&way);
if(way==1)
{
char key1[20];
printf("\n请输入账号:");
scanf("%d",&n);
//s=searchNum(L,n);
//(s==0) printf("无此客户,查找失败!\n");
LinkList p=L->next;
seat=1;
if(L->next==NULL) printf("该链表中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(p->number<=n)
if(p->number==n)
p=p->next;seat++;//!!!!
}
}
s=searchNum(L,n);
if(s==0) printf("无此客户,查找失败!\n");
printf("\n请输入密码:");
scanf("%s",key);
if(p->key!=key) printf("密码错误!\n");
else{
printf("请输入新的名字:");
scanf("%s",name1);
p->name==name1;
printf("修改后:");
printList(L);
}
}
}
if(way==2)
{
char s1;
printf("\n请输入账号:");
scanf("%d",&n);
s=searchNum(L,n);
if(s==0) printf("无此客户,查找失败!\n");
printf("\n请输入密码:");
scanf("%s",key);
if(strcmp(key,p->key)!=0) printf("密码错误!\n");
else{
printf("请输入新的密码:");
scanf("%s",p->key );
p=(LinkList)malloc(LEN); //新结点
p->number=number;
strcpy(p->name,name);
strcpy(p->key,key);
strcpy(p->ID,ID);
p->telenum=telenum;
insertYouXu(L,p); //有序的插入新结点
printf("修改后:");
printList(L);
}
}
if(way==3)
{
printf("\n请输入账号:");
scanf("%d",&n);
s=searchNum(L,n);
if(s==0) printf("无此客户,查找失败!\n");
if(s){
printf("\n请输入密码:");
scanf("%s",key);
if(strcmp(key,p->key)!=0) printf("密码错误!\n");
else{
printf("请输入新的身份证号:");
scanf("%s",p->ID );
p=(LinkList)malloc(LEN); //新结点
p->number=number;
strcpy(p->name,name);
strcpy(p->key,key);
strcpy(p->ID,ID);
p->telenum=telenum;
insertYouXu(L,p); //有序的插入新结点
printf("修改后:");
printList(L);
}
}
}
if(way==4)
{
printf("\n请输入账号:");
scanf("%d",&n);
s=searchNum(L,n);
if(s){
printf("\n请输入密码:");
scanf("%s",key);
if(strcmp(key,p->key)!=0) printf("密码错误!\n");
else{
printf("请输入新的电话号码:");
scanf("%s",p->telenum);
p=(LinkList)malloc(LEN); //新结点
p->number=number;
strcpy(p->name,name);
strcpy(p->key,key);
strcpy(p->ID,ID);
p->telenum=telenum;
insertYouXu(L,p); //有序的插入新结点
printf("修改后:");
printList(L);
}
}
}
else printf("客户账户表中无记录!\n");
break;
}}
case 6:
{
printf("当前通讯录内容如下:\n");
printList(L);
break;
}
case 0: exit(0);
default: printf("\n没有此功能,重新输入\n");
}//endswitch
printf("选择功能:");
scanf("%d",&menu);
}}//endwhile
//end
你不写printf那能显示什么结果呢,你代码前半部分全是在scanf,而没有printf
至于到后面统一printf出问题,我建议你一步一步的调试,执行一步就打印出来看看,找到到底哪一步出了问题
这么长的代码总靠猜不是个办法