购买电动车用户信息管理系统
#include <stdio.h>#include <stdlib.h>
#include <string.h>
char adminname = "admin1";
char adminpassword = "a123456";
struct Date
{
int year;
int month;
int day;
};
typedef struct Infor
{
char name;
char gender;
int age;
char address;
char buytype;
char color;
double price;
struct Date date;
struct Infor *next;
}INFOR,*Pointer;
INFOR infor;
int login(void);
void Menushow(void);
void Add(Pointer infor);
void Modify(Pointer infor);
void Show(Pointer infor);
void Search(Pointer infor);
void Print(Pointer infor);
void Del(Pointer infor);
//void Sort(Pointer infor);
//void Loadfromfile(Pointer infor);
void Xuigai(char adminname[],char adminpassword[]);
int login(void)
{
char username;
char userpassword;
printf("请输入用户名:");
gets(username);
printf("请输入密码:");
gets(userpassword);
if(!strcmp(adminname,username) && !strcmp(adminpassword,userpassword))
{
return 1;
}
else
{
return 0;
}
}
void Menushow(void)
{
int i;
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("|----10.退出系统------------------|\n");
printf("\n");
printf("请输入你选择的编号:");
scanf("%d",&i);
do
{
switch(i)
{
case 1:Add(&infor);break;
case 2:Modify(&infor);break;
case 3:Show(&infor);break;
case 4:Search(&infor);break;
case 5:Del(&infor);break;
//case 6:Sort(&infor);break;
//case 7:Loadfromfile(&infor);break;
//case 8:Save();break;
//case 9:Xuigai(adminname,adminpassword);break;
//case 10:Quit();break;
}
}while(i < 1 || i > 10);
}
void Add(Pointer infor)
{
Pointer p;
static Pointer tail;
do{
p = (Pointer)malloc(sizeof(INFOR));
if(p == NULL)
{
printf("内存分配失败\n");
exit(1);
}
printf("请输入姓名:");
scanf("%s",p->name );
printf("请输入性别(男/女):");
scanf("%s",p->gender );
printf("请输入年龄:");
scanf("%d",&p->age);
printf("请输入地址:");
scanf("%s",p->address );
printf("请输入购品牌和型号:");
scanf("%s",p->buytype );
printf("请输入购买的颜色:");
scanf("%s",p->color );
printf("请输入价格:");
scanf("%f",&p->price );
printf("请输入购买时间:(yyyy-mm-dd):");
scanf("%d-%d-%d",&p->date.year,&p->date.month ,&p->date.day);
if(infor != NULL)
{
tail->next = p;
p->next = NULL;
}
else
{
infor = p;
p->next = NULL;
}
tail = p;
}
while(p->name != '0');
}
void Modify(Pointer infor)
{
Pointer p = infor;
int flag = 0;
char sename;
printf("请输入你要修改的用户名字:");
gets(sename);
while(p != NULL)
{
if(!strcmp(p->name,sename))
{
flag = 0;
break;
}
else
{
flag = 1;
p = p->next;
}
}
if(flag)
{
printf("并未查询到该用户的信息T_T\n");
}
else
{
printf("请输入修改后的信息:\n");
printf("请输入姓名:");
scanf("%s",p->name );
printf("请输入性别(男/女):");
scanf("%s",p->age );
printf("请输入年龄:");
scanf("%d",&p->age);
printf("请输入地址:");
scanf("%s",p->address );
printf("请输入购品牌和型号:");
scanf("%s",p->buytype );
printf("请输入购买的颜色:");
scanf("%s",p->color );
printf("请输入价格:");
scanf("%f",p->price );
printf("请输入购买时间:(yyyy-mm-dd):");
scanf("%d-%d-%d",&p->date.year,&p->date.month,&p->date.day);
}
}
void Show(Pointer infor)
{
Pointer p = infor;
if(p == NULL)
{
printf("暂时还未存入数据!!\n");
printf("显示失败!!");
}
else
{
while(p != NULL)
{
printf("姓名:%s",p->name);
printf("性别:%s",p->gender );
printf("年龄:%d",p->age );
printf("地址:%s",p->address );
printf("购买品牌型号:%s",p->buytype );
printf("颜色:%s",p->color );
printf("价格:%.2f",p->price );
printf("购买时间:%d-%d-%d",p->date.year ,p->date.month ,p->date.day);
}
}
}
void Print(Pointer infor)
{
Pointer p = infor;
printf("姓名:%s",p->name );
printf("性别:%s",p->gender );
printf("年龄:%d",p->age );
printf("地址:%s",p->address );
printf("购买品牌型号:%s",p->buytype );
printf("颜色:%s",p->color );
printf("价格:%.2f",p->price );
printf("购买时间:%d-%d-%d",p->date.year ,p->date.month ,p->date.day);
}
void Search(Pointer infor)
{
Pointer p = infor;
int flag = 0;
char sename;
printf("请输入你要修改的用户名字:");
scanf("%s",sename);
while(p != NULL)
{
if(!strcmp(p->name,sename))
{
printf("已找到相关信息!!\n");
Print(&infor);
}
else
{
p = p->next;
}
}
if(flag)
{
printf("并未查询到该用户的信息T_T\n");
}
else
{
char choi;
printf("是否显示该用户信息(Y/N):");
scanf("%c",choi);
if(choi == 'Y')
{
printf("姓名:%s",p->name);
printf("性别:%s",p->gender );
printf("年龄:%d",p->age );
printf("地址:%s",p->address );
printf("购买品牌型号:%s",p->buytype );
printf("颜色:%s",p->color );
printf("价格:%.2f",p->price );
printf("购买时间:%d-%d-%d",p->date.year ,p->date.month ,p->date.day);
}
else
{
printf("请按任意键继续\n");
getchar();
}
}
}
void Del(Pointer infor)
{
Pointer previous,current,new;
current = infor;
previous = NULL;
char delname;
printf("请输入你要删除的用户姓名:");
gets(delname);
while(strcmp(delname,current->name) && current != NULL)
{
previous = current;
current = current->next ;
}
if(current == NULL)
{
printf("并未找到该用户的信息");
return ;
}
else
{
if(previous == NULL)
{
infor = current->next ;
}
else
{
previous->next = current->next ;
}
printf("删除成功");
free(current);
}
}
void Sort(Pointer infor)
{
;
}
void Loadfromfile(Pointer infor)
{
;
}
void Xuigai(char adminname[],char adminpassword[])
{
char username;
char userpassword;
do{
printf("请输入用户名:");
gets(username);
printf("请输入密码:");
gets(userpassword);
if(!strcmp(adminname,username) && !strcmp(adminpassword,userpassword))
{
do{
printf("请输入修改后的用户名:");
gets(adminname);
printf("请输入密码:");
gets(adminpassword);
printf("请再次输入密码:");
gets(userpassword);
}while(strcmp(userpassword,adminpassword));
}
}while(strcmp(adminname,username) || strcmp(adminpassword,userpassword));
printf("修改完毕");
}
int main(void)
{
int count = 3;
while(1)
{
if(login())
{
printf("\n欢迎使用电瓶车信息管理系统^_^");
printf("\n登陆成功\n");
while(1)
{
Menushow();
}
}
else
{
count -= 1;
printf("用户或密码输入错误\n请重新输入");
if (count== 0)
{
printf("用户名或密码输入错误超过3次\n系统退出\n");
}
else
{
printf("你还有%d次机会\n",count);
}
}
}
return 0;
}
快到期末了,做了一个课设,但是第一个函数就出错了,增加信息都不行,哪里出问题了
求解答 本帖最后由 jhq999 于 2021-12-7 21:13 编辑
你自己试试,我就不运行了,有bug@我
void Add(Pointer infor)
{
Pointer p;
static Pointer tail=infor;///////////
///// do
while(1)
{
p = (Pointer)malloc(sizeof(INFOR));
if(p == NULL)
{
printf("内存分配失败\n");
exit(1);
}
printf("请输入姓名:");
scanf("%s",p->name );
printf("请输入性别(男/女):");
scanf("%s",p->gender );
printf("请输入年龄:");
scanf("%d",&p->age);
printf("请输入地址:");
scanf("%s",p->address );
printf("请输入购品牌和型号:");
scanf("%s",p->buytype );
printf("请输入购买的颜色:");
scanf("%s",p->color );
printf("请输入价格:");
scanf("%f",&p->price );
printf("请输入购买时间:(yyyy-mm-dd):");
scanf("%d-%d-%d",&p->date.year,&p->date.month ,&p->date.day);
if(infor != NULL)
{
tail->next = p;
p->next = NULL;
}
else
{
infor = p;
p->next = NULL;
}
tail = p;
printf("是否继续添加(Y/N)?");
fflush(stdin);
char isbreak=getchar();
if(isbreak!='Y'||isbreak!='y')break;
fflush(stdin);
}
////while(p->name != '0');
} jhq999 发表于 2021-12-7 21:12
你自己试试,我就不运行了,有bug@我
还是不行输入完就自动结束了
请输入用户名:admin1
请输入密码:a123456
欢迎使用电瓶车信息管理系统^_^
登陆成功
|----1.增加购买电瓶车用户信息-----|
|----2.修改购买电瓶车用户信息-----|
|----3.显示购买电瓶车用户信息-----|
|----4.查询用户信息---------------|
|----5.删除用户信息---------------|
|----6.按购买日期进行排序---------|
|----7.从文件中读取用户信息-------|
|----8.将购买用户信息保存到文件---|
|----9.修改密码-------------------|
|----10.退出系统------------------|
请输入你选择的编号:1
请输入姓名:12
请输入性别(男/女):男
请输入年龄:18
请输入地址:都叫我i的
请输入购品牌和型号:就安慰i都
请输入购买的颜色:白色
请输入价格:3000
请输入购买时间:(yyyy-mm-dd):2021-02-28
--------------------------------
Process exited after 40.31 seconds with return value 3221225477
请按任意键继续. . . 本帖最后由 jhq999 于 2021-12-8 16:20 编辑
林江楠 发表于 2021-12-7 21:48
还是不行输入完就自动结束了
只改到Add函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char adminname = "admin1";
char adminpassword = "a123456";
struct Date
{
int year;
int month;
int day;
};
typedef struct Infor
{
char name;
char gender;
int age;
char address;
char buytype;
char color;
double price;
struct Date date;
struct Infor *next;
}INFOR,*Pointer;
Pointer infor=NULL;////////////
int login(void);
void Menushow(void);
void Add(Pointer *infor);/////////////////形参改变,实参并不会随之改变,如果infor参数只是指针,在函数里它的值改变了,
//并不影响代入的实参,所以必须用指针的指针,这样才可以代入的指针类型的实参,
//如果是c++,就不用这么麻烦,直接用引用声明形参
void Modify(Pointer infor);
void Show(Pointer infor);
void Search(Pointer infor);
void Print(Pointer infor);
void Del(Pointer infor);
//void Sort(Pointer infor);
//void Loadfromfile(Pointer infor);
void Xuigai(char adminname[],char adminpassword[]);
int login(void)
{
char username;
char userpassword;
printf("请输入用户名:");
gets(username);
printf("请输入密码:");
gets(userpassword);
if(!strcmp(adminname,username) && !strcmp(adminpassword,userpassword))
{
return 1;
}
else
{
return 0;
}
}
void Menushow(void)
{
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("|----10.退出系统------------------|\n");
printf("\n");
printf("请输入你选择的编号:");
scanf("%d",&i);
switch(i)
{
case 1:Add(&infor);break;
case 2:Modify(infor);break;
case 3:Show(infor);break;
case 4:Search(infor);break;
case 5:Del(infor);break;
//case 6:Sort(&infor);break;
//case 7:Loadfromfile(&infor);break;
//case 8:Save();break;
//case 9:Xuigai(adminname,adminpassword);break;
//case 10:Quit();break;
}
}while(i >0 && i < 10);///////////////
}
void Add(Pointer *infor)///////////
{
Pointer p;
static Pointer tail=*infor;///////////
///// do
while(1)
{
p = (Pointer)malloc(sizeof(INFOR));
if(p == NULL)
{
printf("内存分配失败\n");
exit(1);
}
printf("请输入姓名:");
scanf("%s",p->name );
printf("请输入性别(男/女):");
scanf("%s",p->gender );
printf("请输入年龄:");
scanf("%d",&p->age);
printf("请输入地址:");
scanf("%s",p->address );
printf("请输入购品牌和型号:");
scanf("%s",p->buytype );
printf("请输入购买的颜色:");
scanf("%s",p->color );
printf("请输入价格:");
scanf("%lf",&p->price );///////////////
printf("请输入购买时间:(yyyy-mm-dd):");
scanf("%d-%d-%d",&p->date.year,&p->date.month ,&p->date.day);
if(*infor != NULL)
{
tail->next = p;
p->next = NULL;
}
else
{
*infor = p;
p->next = NULL;
}
printf("是否继续添加(Y/N)?");
fflush(stdin);
char isbreak=getchar();
if(isbreak!='Y'&&isbreak!='y')break;////////////
fflush(stdin);
tail = p;
}
////while(p->name != '0');
} jhq999 发表于 2021-12-8 07:05
只改到Add函数
为什莫需要这么改呢,我不理解 本帖最后由 jhq999 于 2021-12-8 16:29 编辑
林江楠 发表于 2021-12-8 15:58
为什莫需要这么改呢,我不理解
void Add(Pointer *infor);/////////////////形参改变,实参并不会随之改变,如果infor参数只是指针,在函数里它的值改变了,
//并不影响代入的实参,所以必须用指针的指针,“case 1:Add(&infor);break;”这样才可以改变代入的指针的指针类型的实参“&infor”所指向的infor值,
//如果是c++,就不用这么麻烦,直接用引用声明形参。
这也是单链表常见的错误
页:
[1]