main.c文件
#include "Mylist.h"
void menu();
struct Node *list;
void keyDown();
int main(int argc, char *argv[]) {
list = createList();
readInfoFromFile(list, "1.txt");
while(1){
menu();
keyDown();
system("pause");
system("cls");
}
system("pause");
return 0;
}
void menu()
{
printf("--------------【学生管理系统】-----------------\n");
printf("\t\t0. 退出系统\n");
printf("\t\t1. 录入信息\n");
printf("\t\t2. 浏览信息\n");
printf("\t\t3. 修改信息\n");
printf("\t\t4. 删除信息\n");
printf("\t\t5. 查找信息\n");
printf("-----------------------------------------------\n");
}
void keyDown()
{
int choice = 0;
struct student data;
struct Node *pMove = NULL;
scanf("%d", &choice);
switch(choice){
case 0:
printf("正常退出\n");
system("pause");
exit(0);
break;
case 1:
printf("----------------【录入信息】----------------\n");
printf("请输入学生姓名,年龄,性别,电话:");
fflush(stdin);
scanf("%s%d%s%s",data.name, &data.age, data.sex, data.tel ) ;
insertNodeByHead(list, data);
break;
case 2:
printf("----------------【浏览信息】-------------------\n");
printList(list);
break;
case 3:
printf("----------------【修改信息】-------------------\n");
printf("请输入需要修改的学生姓名:");
scanf("%s", data.name);
modification(list, data.name);
break;
case 4:
printf("----------------【删除信息】-------------------\n");
printf("请输入删除的学生姓名:");
scanf("%s", data.name);
deleteAppoinNode(list, data.name);
break;
case 5:
printf("----------------【查找信息】-------------------\n");
printf("请输入要查找学生的姓名:");
scanf("%s", data.name);
pMove = searchInfoByData(list, data.name);
if((pMove) == NULL){
printf("未找到相关信息!\n");
system("pause");
}
else{
printf("姓名\t年龄\t性别\t电话\n");
printf("%s\t%d\t%s\t%s\n", pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel );
}
break;
default:
printf("选择错误,重新输入\n");
system("pause");
break;
}
writeInfoToFile(list, "1.txt");
}
Mylist.h文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student{
char name[50];
int age;
char sex[5];
char tel[20];
};
struct Node{
struct student data;
struct Node*next;
};
struct Node *createList(){
struct Node *headNode = (struct Node *)malloc(sizeof(struct Node));
headNode->next = NULL;
return headNode;
}
struct Node* createNode(struct student data){
struct Node*newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insertNodeByHead(struct Node*headNode, struct student data){
struct Node*newNode = createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
void deleteAppoinNode(struct Node*headNode, char*name){
struct Node*posNode = headNode->next;
struct Node*posFrontNode = headNode;
if(posNode == NULL){
printf("数据为空,无法删除!\n");
return;
}
while(strcmp(posNode->data.name, name)){
posFrontNode = posNode;
posNode = posFrontNode->next;
if(posNode ==NULL){
printf("未找到指定位置无法删除!\n");
return ;
}
}
posFrontNode->next = posNode->next;
free(posNode);
}
void readInfoFromFile(struct Node*headNode, char *fileName){
FILE *fp;
struct student data;
fp = fopen(fileName, "r");
if(fp == NULL){
fp = fopen(fileName, "w+");
}
while(fscanf(fp, "%s\t%d\t%s\t%s\n", data.name, &data.age, data.sex, data.tel) != EOF){
insertNodeByHead(headNode, data);
}
fclose(fp);
}
void writeInfoToFile(struct Node*headNode, char*fileName){
FILE *fp;
fp = fopen(fileName, "w");
if(fp == NULL){
printf("文件打开失败!");
return ;
}
struct Node *pMove = headNode->next;
while(pMove){
fprintf(fp, "%s\t%d\t%s\t%s\n", pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
pMove = pMove->next;
}
fclose(fp);
}
struct Node *modification (struct Node* headNode, char* name){
struct student data;
deleteAppoinNode(headNode, name);
printf("请重新输入学生姓名,年龄,性别,电话:");
fflush(stdin);
scanf("%s%d%s%s",data.name, &data.age, data.sex, data.tel ) ;
insertNodeByHead(headNode, data);
}
struct Node *searchInfoByData(struct Node* headNode, char *name){
struct Node *pMove = headNode->next;
while(strcmp(pMove->data.name, name)){
pMove = pMove->next;
if(pMove == NULL){
return NULL;
}
}
return pMove;
}
void printList(struct Node*headNode){
struct Node*pMove = headNode->next;
printf("姓名\t\t年龄\t性别\t电话\n");
while(pMove){
printf("%s\t\t%d\t%s\t%s\n", pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel );
pMove = pMove->next;
}
printf("\n");
}