能正常运行程序
但是插入链表数据直接就退出了
输入数据之后就会直接按任意键退出
#include
#include
#include
#include
struct student{
int num;
char name[20];
char sex[20];
char age[20];
char project[20];
char clas[20];
char date[20];
int time;
int money;
};
struct Node{
struct student data;
struct Node *next;
};
struct Node* list; //创建表头
struct Node*createHead(){ //创建头结点
struct Node*headNode = (struct Node*)malloc(sizeof(struct Node));
assert(headNode);
headNode->next = NULL;
return headNode;
}
struct Node* createNode(struct student data){ //创建结点
struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
assert(newNode);
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insert(struct Node* headNode,struct student data){ //插入链表
struct Node* newNode = createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
void del(struct Node* headNode,const char*name){ //删除信息
struct Node*preNode = headNode;
struct Node*curNode = headNode->next;
while(curNode != NULL && strcmp(curNode->data.name,name)){
preNode = curNode;
curNode = preNode->next;
}
if(curNode == NULL){
printf("删除失败!未找到指定数据!\n");
}
else{
preNode->next = curNode->next;
free(curNode);
}
}
struct Node* search(struct Node*headNode,const char*name){ //查找学生信息
struct Node*pmove = headNode->next;
while(pmove != NULL && strcmp(pmove->data.name,name)){
pmove = pmove->next;
}
return pmove;
}
struct Node* printproject(struct Node*headNode,const char*project){ //打印项目信息
struct Node*pmove = headNode->next;
while(pmove != NULL && strcmp(pmove->data.project,project)){
pmove = pmove->next;
}
return pmove;
}
struct Node* printclas(struct Node*headNode,const char*clas){ //打印班级信息
struct Node*pmove = headNode->next;
while(pmove != NULL && strcmp(pmove->data.clas,clas)){
pmove = pmove->next;
}
return pmove;
}
void menu(){ //制作菜单
printf("* * * * *幼儿园培训班学生信息管理系统* * * * *\n");
printf("\t\t1.录入小朋友信息\n");
printf("\t\t2.查询小朋友信息\n");
printf("\t\t3.删除小朋友信息\n");
printf("\t\t4.查询项目信息\n");
printf("\t\t5.查询班级信息\n");
printf("\t\t0.退出系统\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("请输入0~5以实现对应操作:");
}
void key(){
int userkey=0;
struct student temp; //接收用户输入
struct Node*result;
scanf("%d", &userkey);
switch(userkey){
case 0:
printf("退出系统\n");
system("pause");
exit(0);
break;
case 1:
printf("录入小朋友信息\n");
printf("请输入小朋友信息(编号,姓名,性别,年龄,项目,班级,缴费日期,缴费年限):");
scanf("%d%s%s%s%s%s%s%d",
&temp.num,
temp.name,20,
temp.sex,20,
temp.age,20,
temp.project,20,
temp.clas,20,
temp.date,20,
&temp.time);
insert(list,temp);
break;
case 2:
printf("查询小朋友信息\n");
printf("请输入要查找小朋友的姓名:");
scanf("%s",temp.name,20);
result = search(list,temp.name);
if(result == NULL){
printf("未找到小朋友!\n");
}
else{
printf("编号\t姓名\t性别\t年龄\t项目\t班级\t缴费日期\t缴费年限\n");
printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n",
result->data.num,
result->data.name,
result->data.sex,
result->data.age,
result->data.project,
result->data.clas,
result->data.date,
result->data.time);
}
break;
case 3:
printf("删除小朋友信息\n");
printf("请输入要删除的小朋友姓名:");
scanf("%s",temp.name,20);
result = search(list,temp.name);
if(result == NULL){
printf("删除失败!未找到小朋友!\n");
}
else{
del(list,temp.name);
temp.money = temp.time*1000;
printf("成功删除小朋友信息,其退费为%d");
}
break;
case 4:
printf("查询项目信息\n");
printf("请输入要查询的项目:");
scanf("%s",temp.project,20);
result = printproject(list,temp.project);
if(result == NULL){
printf("该项目无小朋友!\n");
}
else{
printf("编号\t姓名\t性别\t年龄\t项目\t班级\t缴费日期\t缴费年限\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n",
result->data.num,
result->data.name,
result->data.sex,
result->data.age,
result->data.project,
result->data.clas,
result->data.date,
result->data.time);
}
break;
case 5:
printf("查询班级信息\n");
printf("请输入要查询的班级:");
scanf("%s",temp.clas,20);
result = printclas(list,temp.clas);
if(result == NULL){
printf("该班级无小朋友!\n");
}
else{
printf("编号\t姓名\t性别\t年龄\t项目\t班级\t缴费日期\t缴费年限\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n",
result->data.num,
result->data.name,
result->data.sex,
result->data.age,
result->data.project,
result->data.clas,
result->data.date,
result->data.time);
}
break;
default:
printf("输入错误,请输入0~5以实现对应操作\n");
break;
}
}
int main(){
list = createHead();
while(1){
menu();
key();
system("pause"); //按任意键继续
system("cls"); //清屏
}
return 0;
}
用过%*c也不管用
程序崩溃了
110行,你这输入参数,应该用scanf_s函数啊。