#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
1、界面
2、数据结构设计
3、交互
*/
typedef struct {
char name[200];
int age;
char sex[5];
int grade;
char phoneNum[200];
}student;
//链表
typedef struct Node{
// int data;
student data;
struct Node* next;
}Node,*LinkList;
//创建链表
LinkList createList(){
LinkList headNode=(LinkList)malloc(sizeof(Node));
headNode->next=NULL;
return headNode;
}
//创建结点
Node* createNode(student data){
Node* p=(Node*)malloc(sizeof(Node));
p->data=data;
p->next=NULL;
return p;
}
//插入结点
void insertNodeByHead(LinkList headNode,student data){
Node* p=createNode(data);
p->next=headNode->next;
headNode->next=p;
}
//删除指定数据,按姓名
Node* deleteNode(LinkList headNode,char* name){
Node* p=headNode->next;
Node* pre=headNode;
if(name==NULL){
printf("数据为空,删除失败!\n");
return NULL;
}
while(p){
if(strcmp(p->data.name,name)==0){
pre->next=p->next;
free(p);
return;
}
pre=p;
p=pre->next;
}
return p;
}
//查找基于值,按姓名
Node* searchByData(LinkList headNode,char* name){
Node* p=headNode->next;
Node* pre=headNode;
if(name==NULL){
printf("数据为空,查找失败!\n");
return NULL;
}
while(p){
if(strcmp(p->data.name,name)==0){
return p;
}
pre=p;
p=pre->next;
}
return p;
}
//打印链表
void printList(LinkList headNode){
// printf("11111111111111111");
Node* p=headNode->next;
printf("姓名\t年龄\t性别\t成绩\t电话\n");
while(p!=NULL){
printf("打印");
printf("%s\t%d\t%s\t%d\t%s\n",p->data.name,p->data.age,p->data.sex,p->data.grade,p->data.phoneNum);
p=p->next;
}
printf("\n");
}
//菜单
void menu(){
printf("------------【学生信息管理系统】------------\n");
printf("\t\t0.退出系统\n");
printf("\t\tl.录入信息\n");
printf("\t\t2.浏览信息\n");
printf("\t\t3.修改信息\n");
printf("\t\t4.删除信息\n");
printf("\t\t5.查找信息\n");
printf("--------------------------------------------\n");
}
LinkList list;
//交互
void keyDown(){
list=createList();
int choose=0;
student data;
// data.name='lili';
// data.age=21;
// data.sex='男';
// data.grade=90;
// data.phoneNum='17674749585';
// insertNodeByHead(list,data);
// printList(list);
a: printf("请输入要执行的操作代码:");
scanf("%d",&choose);
switch(choose){
case 0:
printf("正常退出!\n");
system("pause");
exit(0);
break;
case 1:
printf("------------【录入信息】------------\n");
printf("请分别输入学生的姓名,年龄,性别,成绩,电话:");
fflush(stdin);
scanf("%s%d%s%d%s",&data.name,&data.age,&data.sex,&data.grade,&data.phoneNum);
// printf("%d",data.age);
insertNodeByHead(list,data);
goto a;
break;
case 2:
printf("------------【浏览信息】------------\n");
printList(list);
goto a;
break;
case 3:
printf("------------【修改信息】------------\n");
goto a;
break;
case 4:
printf("------------【删除信息】------------\n");
goto a;
break;
case 5:
printf("------------【查找信息】------------\n");
goto a;
break;
default:
printf("操作代码错误,请重新输入!\n");
system("pause");
goto a;
break;
}
}
int main() {
menu();
while(1){
keyDown();
}
system("pause");
system("cls");
//链表的测试
// LinkList L=createList();
// insertNodeByHead(L,1);
// insertNodeByHead(L,4);
// insertNodeByHead(L,5);
// insertNodeByHead(L,8);
// insertNodeByHead(L,10);
// printList(L);
// printf("删除指定数据:4\n");
// deleteNode(L,4);
// printList(L);
// printf("链表查找:8\n");
// printf("%d\n",searchByData(L,8)->data);
// system("pause");
return 0;
}