c语言链表结构编写简单学生教务系统:
#include<windows.h>
#include<string.h>
#include<conio.h>
//定义学生结构体
typedef struct
{
char number[15];
char name[5];
double regular_score;
double final_score;
double total_score;
}Student;
//定义学生链表结点
typedef struct tagNode
{
Student stu;//数据域
struct tagNode *pNext;//指针域
}Node;
Node *head=NULL;
void Print_Menu()
{
printf("================================================\n");
printf("==============欢迎来到教务系统==================\n");
printf("================================================\n");
printf("================请选择功能======================\n");
printf("=\t\t1、录入学生信息\t\t\t=\n");
printf("=\t\t2、查询学生信息\t\t\t=\n");
printf("=\t\t3、显示学生信息\t\t\t=\n");
printf("=\t\t4、修改学生信息\t\t\t=\n");
printf("=\t\t5、删除学生信息\t\t\t=\n");
printf("=\t\t0、退出程序系统\t\t\t=\n");
printf("================================================\n");
return;
}
//录入学生信息
void Enter_Students()
{
//清屏
system("CLS");
printf("==============================================\n");
printf("==============欢迎使用学生教务系统============\n");
printf("==============================================\n");
printf("===============录入学生信息功能===============\n");
printf("==============================================\n");
printf("\n请依次输入学生的信息:\n\n|学生学号 \t|姓名 |平时成绩| |期末成绩| |总评成绩|\n") ;
Node *node=(Node*)malloc(sizeof(Node));
node->pNext=NULL;
if(head==NULL)
{
head=node;
}else
{
Node *p=head;
while(p!=NULL && p->pNext!=NULL){
p=p->pNext;
}
p->pNext=node;
}
scanf("%s %s %lf %lf %lf",node->stu.number,node->stu.name,&node->stu.regular_score,&node->stu.final_score,&node->stu.total_score);
printf("\n学生信息录入系统成功!\n");
return;
}
//查询学生信息
Node *Inquire_Students()
{
system("CLS");
printf("==============================================\n");
printf("==============欢迎使用学生教务系统============\n");
printf("==============================================\n");
printf("===============查询学生信息功能===============\n");
printf("==============================================\n");
char number[15];
printf("\n请输入要查询的学生的学号:\n");
scanf("%s",number);
Node *p=head;
printf("\n|学生学号\t|姓名\t|平时成绩\t|期末成绩\t|总评成绩\t|\n");
while(p!=NULL)
{
int ptr=_stricmp(p->stu.number,number);
if(ptr==0)//找到学生信息
{
return p;
}//否则将指针往后移遍历整个while
else
{
p=p->pNext;
}}
//遍历完也没找到的话返回没有找到
if(p==NULL){
return NULL;}
return NULL;
}
//显示学生信息
void Display_Students()
{
system("CLS");
printf("==============================================\n");
printf("==============欢迎使用学生教务系统============\n");
printf("==============================================\n");
printf("===============显示学生信息功能===============\n");
printf("==============================================\n");
Node *p;
p=head;
printf("\n|学生学号\t|姓名\t|平时成绩\t|期末成绩\t|总评成绩\t|\n");
if(p==NULL)
{
printf("未找到该学生信息!!\n");
}
while(p!=NULL)
{
printf("%s\t %s\t %0.2lf\t %0.2lf\t %0.2lf\t\n",p->stu.number,p->stu.name,p->stu.regular_score,p->stu.final_score,p->stu.total_score);
p=p->pNext;
}
printf("=============================================\n");
}
//删除学生信息
void Delete_Students()
{
system("CLS");
printf("==============================================\n");
printf("==============欢迎使用学生教务系统============\n");
printf("==============================================\n");
printf("===============删除学生信息功能===============\n");
printf("==============================================\n");
char number[15];
printf("请输入要删除的学生信息的学号:\n");
scanf("%s",number);
Node *p=head;
Node *p1=NULL;//定义的临时指针
int ptr =_stricmp(head->stu.number,number);
if(ptr==0)
{
p1=head;
head=head->pNext;
free(p1);
printf("删除学生信息成功!!\n");
}
while(p->pNext!=0)
{
int ptr =_stricmp(head->stu.number,number);
if(ptr==0)
{
p1=p->pNext;
p->pNext=p->pNext->pNext;
free(p1);
printf("删除学生信息成功!!\n");
}
p=p->pNext;
}
if(p==NULL)
{
printf("未找到该学生信息!\n");
}
}
//修改学生信息
void Modify_Students()
{
system("CLS");
printf("==============================================\n");
printf("==============欢迎使用学生教务系统============\n");
printf("==============================================\n");
printf("===============修改学生信息功能===============\n");
printf("==============================================\n");
char number[15];
printf("\n请输入需要修改学生信息的学号:\n");
scanf("%s",number);
Node *p=head;
while(p!=NULL)
{
int ptr =_stricmp(head->stu.number,number);
if(ptr==0)
{
//显示需要修改的学生信息
printf("====================================\n");
printf("%s\t %s\t %0.2lf\t %0.2lf\t %0.2lf\t\n",p->stu.number,p->stu.name,p->stu.regular_score,p->stu.final_score,p->stu.total_score);
printf("====================================\n");
printf("请修改学生信息:\n");
scanf("%s %s %lf %lf %lf",p->stu.number,p->stu.name,&p->stu.regular_score,&p->stu.final_score,&p->stu.total_score);
printf("修改学生信息成功!\n");
break;
}
p=p->pNext;
}
if(p==NULL)
{
printf("为找到该学生信息!\n");
}
}
int main(int argc,char *argv[])
{
while(1)
{
system("CLS");
Print_Menu();
char ch;
ch=_getch();
switch(ch)
{
case '1':
Enter_Students();
break;
case '2':{
Node* pNode=Inquire_Students();
if(pNode!=NULL){
printf("%s\t %s\t %0.2lf\t %0.2lf\t %0.2lf\t\n",pNode->stu.number,pNode->stu.name,pNode->stu.regular_score,pNode->stu.final_score,pNode->stu.total_score);
}else{
printf("未找到该学生信息!请确认学生信息!\n");
}
break; }
case '3':
Display_Students();
break;
case '4':
Modify_Students();
break;
case '5':
Delete_Students();
break;
case '0':
printf("欢迎下次使用!\n");
break;
default:
printf("您输入的数字有误,请选择功能!\n");
break;
}
system("PAUSE");
}
return 0;
}