#include "stdlib.h"
#include "string.h"
typedef struct
{
int num
char name[10]
int grade
}student
typedef struct node
{
student date
struct node *next
}*link
link head = NULL
student creat(void)
{
student p
printf("请输入学生学号:")
setbuf(stdin,(char *)0)
scanf("%d",&p.num)
printf("请输入学生名字:")
setbuf(stdin,(char *)0)
scanf("%s",p.name)
printf("请输入学生成绩:")
setbuf(stdin,(char *)0)
scanf("%d",&p.grade)
return p
}
void insert(student date)
{
link p = (struct node*)malloc(sizeof *p)
p->date=date
p->next=head
head=p
}
void output(void)
{
link p = head
printf("|----学号-----姓名-------成绩--|\n")
while(p!=NULL)
{
printf("|%-9d%-11s%-6d|\n",p->date.num,p->date.name,p->date.grade)
p=p->next
}
printf("|------------------------------|\n")
}
void init(void)
{
puts("*************欢迎使用信息查询系统*************")
puts("*\t+-------------------------+*")
puts("*\t| 1.添加记录|*")
puts("*\t| 2.显示所有记录|*")
puts("*\t| 0.保存退出|*")
puts("*\t+-------------------------+*")
puts("********************************************")
printf("\t请输入您的选择:")
}
int main()
{
int n
char cmd[10]
do{
//system("cls")
men:init()
setbuf(stdin,(char *)0)//清空输入流
scanf("%[^\n]",cmd)//接受除换行以外的所有字符存入cmd中,并加上'\0'标志
sscanf(cmd,"%d",&n)
/*处理当命令不符合条件的情况*/
if(strlen(cmd) != 1 || n <0 || n >2 || !(*cmd >= '0' &&*cmd <= '2'))
{
printf("\t输入错误或没有这个选项!")
getchar()
getchar()
goto men
}
switch(n)
{
case 1:insert(creat())puts("\t添加成功!")break
case 2:output()break
case 0: return 0
default :break
}
printf("\tPress Enter To Continue!")
getchar()
getchar()
}while(n != 0)
return 0
}
#include<stdio.h>#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct student
{
char num[20]//学号
char name[20]//用户姓名
char phone[20]//电话号码
char addr[100]//通讯地址
struct student *next
}
void insert(student* head)//添加一条记录
{
student *p=head
student *newStud=(student*)malloc(sizeof(student))
printf("输入添加用户信息\n")
printf("学号:")
scanf("%s",newStud->num)
printf("姓名:")
scanf("%s",newStud->name)
printf("电话:")
scanf("%s",newStud->phone)
printf("地址:")
scanf("%s",newStud->addr)
while(p->next!=NULL)
{
if(strcmp(p->num,newStud->num)==0)
{
printf("此学号的用户已存在!\n")
return
}
p=p->next
}
p->next=newStud
newStud->next=NULL
printf("添加成功\n")
}
void update(student *head)//修改一条记录
{
student *p=head->next
char num[20]
printf("输入待修改用户学号:")
scanf("%s",num)
while(p!=NULL)
{
if(strcmp(p->num,num)==0)
{
printf("输入修改后信息\n")
printf("学号:")
scanf("%s",&p->num)
printf("姓名:")
scanf("%s",&p->name)
printf("电话:")
scanf("%s",&p->phone)
printf("地址:")
scanf("%s",&p->addr)
printf("修改成功\n")
return
}
p=p->next
}
printf("不存在此学号的用户")
}
void delRecord(student *head) //删除一条记录
{
student *p1,*p2
p1=head
p2=p1->next
char num[20]
printf("输入待删除用户学号:")
scanf("%s",num)
while(p2!=NULL)
{
if(strcmp(p2->num,num)==0)//找到则删除此用户
{
p1->next=p2->next
free(p2)
printf("删除成功\n")
return
}
p1=p2//没找到则继续遍历
p2=p2->next
}
printf("不存在此学号的用户\n")
}
void findByNum(student *head)//按学号查找
{
student *p=head->next
char num[20]
printf("输入待查找用户学号:")
scanf("%s",num)
while(p!=NULL)
{
if(strcmp(p->num,num)==0)
{
printf("学号:%s\n",p->num)
printf("姓名:%s\n",p->name)
printf("电话:%s\n",p->phone)
printf("地址:%s\n",p->addr)
return
}
p=p->next
}
printf("不存在此学号的用户\n")
}
void findByName(student *head)//按姓名查找
{
student *p=head->next
char name[20]
printf("输入待查找用户姓名:")
scanf("%s",name)
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
printf("学号:%s\n",p->num)
printf("姓名:%s\n",p->name)
printf("电话:%s\n",p->phone)
printf("地址:%s\n",p->addr)
return
}
p=p->next
}
printf("不存在此姓名的用户\n")
}
void main()
{
student *head=(student*)malloc(sizeof(student))
head->next=NULL
char choice
printf("\t*****************************\n")
printf("\t1,添加一条记录\n")
printf("\t2,修改一条记录\n")
printf("\t3,删除一条记录\n")
printf("\t4,按学号查找\n")
printf("\t5,按姓名查找\n")
printf("\t6,退出\n")
printf("\t请按键选择\n")
printf("\t*****************************\n")
while(true)
{
printf("请按键选择 *** 作:\n")
fflush(stdin)//清除缓冲区
choice=getch()
switch(choice)
{
case '1':
insert(head)
break
case '2':
update(head)
break
case '3':
delRecord(head)
break
case '4':
findByNum(head)
break
case '5':
findByName(head)
break
case '6':
exit(0)
default:
printf("输入错误\n")
}
}
}
你的num应该是char类型吧?
还有,name数组长度不用那么大啊,好浪费空间!
我测试了下,没什么问题,要是有什么问题可以hi我
#include#include
# include "stdlib.h"
#define LEN sizeof(struct stu)
struct stu
{
long num
char name[20]
char sex
int age
char addr[30]
struct stu *next
}
int main()
{
int n
struct stu *head
struct stu *p1,*p2
head=(struct stu*)malloc (LEN)
head->next=NULL
p1=head
p2=(struct stu*)malloc (LEN)
p2->next=NULL
printf("学号\t姓名\t性别\t年龄\t住址\n")
scanf("%ld,\t%s,\t%c,\t%d,\t%s",&p2->num,&p2->name,&p2->sex,&p2->age,&p2->addr)
while(p2->num!=0)
{
p1->next=p2
p1=p2
fflush(stdin)
p2=(struct stu*)malloc (LEN)
printf("学号\t姓名\t性别\t年龄\t住址\n")
scanf("%ld,%s,%c,%d,%s",&p2->num,&p2->name,&p2->sex,&p2->age,&p2->addr)
}
}纯手打,希望采纳。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)