前天帮一个小学妹修改了下代码,用链表实现的,功能估计是最简单的了.没啥技术含量.中间涉及到了指针,结构体,文件操作.对于刚学习完C语言的同学可以练习一下.
直接上代码

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct Info {

char ID[20];
char name[20];
char sex[10];
int age;
//int clanguage;

};

typedef struct Stu

{

struct Info stu;

struct Stu *pNext;

} Student, *pStudent;

/*

链表的操作:

1、创建节点数据结构

2、创建链表头

3、创建节点并在节点中存放学员信息

4、遍历显示

*/

/***************************************************************

功能:创建链表头

传参:无

返回值:需要返回创建头结点的首地址

***************************************************************/

pStudent CreateHead()

{

pStudent phead = (pStudent)malloc(sizeof(Student));

phead->pNext = NULL;

phead->stu.age = 0;

//phead-> = " ";
strcpy(phead->stu.ID, " ");
strcpy(phead->stu.name, " ");
strcpy(phead->stu.sex, " ");

return phead;

}

/***************************************************************

功能:创建节点并在节点中存放学员信息

传参:传递学员信息结构

返回值:需要返回创建结点的首地址

***************************************************************/

pStudent CreateInode(struct Info info)

{

pStudent pnew = (pStudent)malloc(sizeof(Student));

pnew->pNext = NULL;

pnew->stu = info;

return pnew;

}

/***************************************************************

功能:头插法

传参:传递学员信息结构,还需要头结点的首地址

返回值:无返回值

***************************************************************/

void InsertHead(struct Info info, pStudent head)

{

pStudent InsertNode = CreateInode(info);//若存在则不存入学员信息//

InsertNode->pNext = head->pNext;

head->pNext = InsertNode;

}

/***************************************************************

功能:尾插法

传参:传递学员信息结构,还需要头结点的首地址

返回值:无返回值

***************************************************************/

void InsertEnd(struct Info info, pStudent head)

{

pStudent pmove = head;

pStudent InsertNode = CreateInode(info);

while (pmove->pNext != NULL)

{

pmove = pmove->pNext;

}
pmove->pNext = InsertNode;

InsertNode->pNext = NULL;

}

/***************************************************************

功能:查找

传参:传递查找学员信息结构,还需要头结点的首地址

返回值:返回查找到的学员信息结构首地址

***************************************************************/

pStudent SeekInfo(struct Info info, pStudent head)

{

pStudent pmove = head->pNext;



while (pmove != NULL)

{

if (strcmp(pmove->stu.ID, info.ID) == 0)

{

break;

}

pmove = pmove->pNext;

}


return pmove;



}

/***************************************************************

功能:修改信息

传参:传递查找学员信息结构,还需要头结点的首地址,修改信息

返回值:void

***************************************************************/

void ChangeInfo(struct Info info, pStudent head, struct Info info1)

{

pStudent tmp = SeekInfo(info, head);
if(tmp==NULL){
printf("要修改学生的ID不存在,修改失败!\n");
}else{
tmp->stu = info1;
printf("修改成功!\n");
}


}

/***************************************************************

功能:删除信息

传参:传递查找学员信息结构,还需要头结点的首地址

返回值:void

***************************************************************/

void DeleteInfo(struct Info info, pStudent head)

{

pStudent pmove = head->pNext;

pStudent ptmp = head;//辅助节点.

if (pmove == NULL)

{

printf("学生表为空,无法进行删除操作\n");

return;

}

while (pmove!=NULL){
if(strcmp(pmove->stu.ID,info.ID)==0){
break;
}
ptmp = pmove;
pmove=pmove->pNext;
}
if (pmove == NULL){
printf("查无此人,删除失败!\n");
}else{
ptmp->pNext = pmove->pNext;
free(pmove);
printf("删除成功!\n");
}

}

/***************************************************************

功能:打印所有节点的信息

传参:需要头结点的首地址

返回值:无返回值

***************************************************************/

void Print(pStudent head)

{

pStudent pmove = head->pNext;

while (pmove != NULL)

{

printf("ID:%s\tname:%s\tsex:%s\tage=%d\n",pmove->stu.ID, pmove->stu.name,pmove->stu.sex, pmove->stu.age);

pmove = pmove->pNext;

}

}
/***************************************************************

功能:将学员信息写入文件

传参:需要头结点的首地址

返回值:无返回值

***************************************************************/
void SaveFile(pStudent head)

{

FILE *fp = fopen("student.txt", "a+");

pStudent pmove = head->pNext;

while (pmove != NULL)

{
//ID:%s\tname:%s\tsex:%sage=%d\n
fprintf(fp, "ID:%s\tname:%s\tsex:%sage=%d\n", pmove->stu.ID,pmove->stu.name,pmove->stu.sex, pmove->stu.age);

pmove = pmove->pNext;

}

fclose(fp);

}

void help()
{
printf("此学员管理系统功能包括学员信息的增删改查\n通过键入1添加学生信息\n键入2查询学生信息\n键入3修改学生信息\n键入4按学号删除信息\n键入5显示学生信息\n键入6保存当前学生信息\n键入7退出系统\n");
}
/***************************************************************

功能:菜单显示

传参:无需传参

返回值:返回选项数字

***************************************************************/
int menu()
{
int num;
printf("\t -----------------------------------\n");
printf("\t ---------学员信息管理系统----------\n");
printf("\t ------- 1.添加学生信息--------------\n");
printf("\t ---------2.查询学生信息--------------\n");
printf("\t ---------3.修改学生信息------------\n");
printf("\t ---------4.按学号删除信息--------\n");
printf("\t ---------5.显示学生信息---------\n");
printf("\t ---------6.保存当前学生信息-----\n");
printf("\t ---------7.退出菜单-----------\n");
p:
printf("请输入操作选项0-7\n");
scanf("%d", &num);
if (num >= 8 || num < 0)
{
printf("请重新输入\n");
goto p;
}
return num;

}

int main()

{
int num = 0;
struct Info info, info1;

pStudent tmp;

pStudent phead = CreateHead();
while (1)
{
num = menu();
switch (num)

{

case 0:help(); break;

case 1:

char ch;

printf("请输入学员信息ID---name---sex---age\n");

scanf("%s%s%s%d", info.ID,info.name,info.sex, &info.age);

InsertHead(info, phead);

break;

case 2:printf("请输入查找学员ID\n");

scanf("%s", info.ID);

tmp = SeekInfo(info, phead);
if(tmp!=NULL){
printf("ID:%s\tname:%s\tsex:%s\tage=%d\n",tmp->stu.ID, tmp->stu.name,tmp->stu.sex, tmp->stu.age);
}else{
printf("查无此人!\n");
}


//printf("name:%s\tage=%d\n", tmp->, tmp->stu.age);

break;

case 3:

printf("请输入查找学员学号ID\n");

scanf("%s", info.ID);
//scanf("%s%s%s%d", ,,info.sex, &info.age);
printf("请输入修改后的学员信息:ID---name---sex---age\n");

//scanf("%s%d", , &info1.age);
scanf("%s%s%s%d", info1.ID,info1.name,info1.sex, &info1.age);

ChangeInfo(info, phead, info1);

break;

case 4:printf("请输入删除学员ID\n");

scanf("%s", info.ID);

DeleteInfo(info, phead);

break;

case 5:Print(phead);

break;

case 6:SaveFile(phead);

break;

case 7:

return 0; break;

}

}
system("pause");

return 0;

}

运行结果:

学员管理系统的实现(C语言)_信息结构


学员管理系统的实现(C语言)_c语言_02


学员管理系统的实现(C语言)_c语言_03