博主刚刚学完单链表,本着以实践为主的原则,写了一个简陋的学生信息管理系统 ^^! 比较简陋,大神勿喷。。。。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct _student{
char name[10];
int age;
char number[11];
char sex[4];
struct _student *next;
}student;
typedef student* pStudent;
student tempdata;
pStudent List = NULL;
pStudent createList(){ ///初始化学生信息管理表
pStudent headNode = (pStudent)malloc(sizeof(student));
if (headNode == NULL){
printf("create error\n");
exit(0);
}
headNode->next=NULL;
return headNode;
}
pStudent createNewNode(student data){ //新建节点
pStudent newNode = (pStudent)malloc(sizeof(student));
newNode->age = data.age;
strcpy(newNode->name, data.name);
strcpy(newNode->sex, data.sex);
strcpy(newNode->number, data.number);
newNode->next = NULL;
return newNode;
}
void rewriteNode(pStudent headNode, char *name){ //按名查找修改学生信息
pStudent rewNode = headNode->next;
if (rewNode == NULL){
printf("信息为空,无法查找!\n");
}
else{
while (rewNode != NULL&&strcmp(rewNode->name, name)){
rewNode = rewNode->next;
}
if (rewNode == NULL){
printf("查无此人!\n");
}
else{
printf("查找成功,请输入你需要修改的学生的完整信息:");
scanf("%s%d%s%s", rewNode->name, &rewNode->age, rewNode->number, rewNode->sex);
printf("修改成功!\n");
}
}
}
void seekNode(pStudent headNode, char* name){
pStudent seekNode = headNode->next;
if (seekNode == NULL){
printf("信息为空,无法查找!\n");
}
else{
while (seekNode != NULL&&strcmp(seekNode->name, name)){
seekNode = seekNode->next;
}
if (seekNode == NULL){
printf("查无此人!\n");
}
else{
printf("\t\t%s\t\t%s\t\t%d\t\t%s\n", seekNode->name, seekNode->number, seekNode->age, seekNode->sex);
}
}
}
void addNewNode(pStudent headNode, student data){ //增加学生信息
pStudent newNode = createNewNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
void deletePosNode(pStudent headNode, char* name){ //删除指定学生信息
pStudent deleteNode = headNode->next;
if (!deleteNode){
printf("信息为空,无法删除\n");
}
else{
pStudent deleteFrontNode = headNode;
while (deleteNode!= NULL&&strcmp(deleteNode->name, name)){
deleteFrontNode = deleteNode;
deleteNode = deleteFrontNode->next;
}
if (deleteNode == NULL){
printf("查无此人,无法删除\n");
}
else{
deleteFrontNode->next = deleteNode->next;
free(deleteNode);
deleteNode = NULL;
}
}
}
void printList(pStudent headNode){ //输出学生信息
pStudent pMoveNode = headNode->next;
if (!pMoveNode){
printf("信息表为空,无法查看\n");
}
else{
while (pMoveNode != NULL){
printf("\t\t%s\t\t%s\t\t%d\t\t%s\n", pMoveNode->name, pMoveNode->number, pMoveNode->age, pMoveNode->sex);
pMoveNode = pMoveNode->next;
}
}
}
void systemOut(){
printf("\t\t\t\t****************学生信息管理系统****************\n");
printf("\t\t\t\t****************1.添加学生信息 ****************\n");
printf("\t\t\t\t****************2.修改学生信息 ****************\n");
printf("\t\t\t\t****************3.删除学生信息 ****************\n");
printf("\t\t\t\t****************4.浏览学生信息 ****************\n");
printf("\t\t\t\t****************5.查找学生信息 ****************\n");
printf("\t\t\t\t****************6.退出管理系统 ****************\n");
}
void getKey(){
int choice = 0;
printf("请输入你需要的操作:");
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("请输入你要添加的学生信息:");
scanf("%s%d%s%s", tempdata.name, &tempdata.age, tempdata.number, tempdata.sex);
addNewNode(List, tempdata);
printf("添加成功!\n");
break;
case 2:
printf("请输入需要修改学生信息的学生姓名:");
scanf("%s", tempdata.name);
rewriteNode(List, tempdata.name);
break;
case 3:
printf("请输入需要删除的学生姓名:");
scanf("%s", tempdata.name);
deletePosNode(List, tempdata.name);
printf("删除成功!\n");
break;
case 4:
printf("\t\t姓名\t\t学号\t\t年龄\t\t性别\n");
printList(List);
break;
case 5:
printf("请输入需要查询的学生姓名:");
scanf("%s", tempdata.name);
printf("\t\t姓名\t\t学号\t\t年龄\t\t性别\n");
seekNode(List, tempdata.name);
break;
case 6:
printf("退出成功!");
exit(0);
break;
}
}
int main(){
List = createList();
systemOut();
while (1){
getKey();
}
return 0;
}
代码只在vs编译器上跑过,其他编译器不清楚能不能运行。