-
/***************************************
-
*版权所有 (C)2017,renzexi
-
*文件名称:action.h
-
*文件标识:无
-
*内容摘要:定义数据和函数声明
-
*其他说明:无
-
*当前版本:V1.0
-
*作者:任泽西
-
*完成时间:20171222
-
*修改记录:修改了重定义的错误
-
*修改时间:20171222
-
*版本号:V1.0
-
*修改人:renzexi
-
****************************************/
-
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#ifndef _COMMOM
#define _COMMOM
typedef struct Student
{
char Num[30];/*学生学号*/
char Name[30];/*学生姓名*/
char className[30];/*班级名称*/
char telNumber[30];/*学生手机号*/
char email[30];/*学生邮箱*/
char course[30];/*课程信息*/
int score;/*成绩*/
}stu;
typedef struct LNode
{
stu data;
struct LNode* next;
}Linklist;
#endif // _COMMOM
#ifndef TEST_H
#define TEST_H
void Initlist(Linklist *&L);//初始化单链表
void Creatlist(Linklist *&L);//头插法生成单链表
void SearchNum(Linklist *L,char Num[30]);//学号查询
void SearchName(Linklist *L,char Name[30]);//姓名查询
void Insert(Linklist *&L,char Num[30]);//插入信息
void Del(Linklist *&L,char Num[30]);//按学号删除
void Alter(Linklist *L,char Num[30]);//更改信息
void Display(Linklist *&L);//显示学生信息
void SortNum(Linklist *L);//学号排序
void SortScore(Linklist *L);//成绩排序
#endif // _TEST_H
源文件main.cpp
-
/***************************************
-
*版权所有 (C)2016,renzexi
-
*文件名称:main.cpp
-
*文件标识:无
-
*内容摘要:每个函数的实现以及主函数
-
*其他说明:无
-
*当前版本:V1.0
-
*作者:任泽西
-
*完成时间:20171222
-
*修改记录:修改了浏览信息不显示的bug
-
*修改时间:20171222
-
*版本号:V1.0
-
*修改人:renzexi
-
****************************************/
-
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include "action.h"
Linklist *L;
int main()
{
system("color 7e");
static int s;
static int n;
static char m;
static char Name[100];
static char Num[100];
Initlist(L);//初始化单链表
int x=1;
while(x)
{
printf(" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf(" ◆ 欢迎使用学生个人信息管理系统 ◆\n");
printf(" ◆ 【菜单】 ◆\n");
printf(" ◆ 1.录入学生的个人信息 ◆\n");
printf(" ◆ 2.查询学生的个人信息 ◆\n");
printf(" ◆ 3.学生的信息进行排序 ◆\n");
printf(" ◆ 4.插入学生的个人信息 ◆\n");
printf(" ◆ 5.浏览学生的个人信息 ◆\n");
printf(" ◆ 6.修改学生的个人信息 ◆\n");
printf(" ◆ 7.删除学生的个人信息 ◆\n");
printf(" ◆ 【0】退出个人信息管理系统 ◆\n");
printf(" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf(" 请选择操作序号:");
scanf("%d",&s);
switch(s)
{
case 1:
{
Creatlist(L);
do{
system("cls");
printf("是否继续输入?(Y/N):");
getchar();
scanf("%s",&m);
if(m=='Y')
Creatlist(L);
}while(m!='N');
break;
}
case 2:
{
system("cls");
printf("**************欢迎进入到班级信息查询系统******\n");
printf("**************请输入1or2******\n");
printf("**************1、按姓名查找******\n");
printf("**************2、按学号查找******\n");
scanf("%d",&n);
if(n==1)
{
printf("请输入要查找人的姓名: \n");
scanf("%s",&Name);
SearchName(L,Name);
}
if(n==2)
{
printf("请输入要查找人的学号: \n");
scanf("%s",&Num);
SearchNum(L,Num);
}
printf("*************欢迎下次进入*******************\n");
break;
}
case 3:
{
printf("**************欢迎进入到班级信息的显示功能******\n");
printf("按需求显示班级中所有学生的信息\n");
printf("*********************************\n");
printf("\n\t\t 1.按学号大小显示");
printf("\n\t\t 2.按成绩高低显示\n");
scanf("%d",&n);
if(n==1)
{
printf("班级中所有学生的信息如下: \n");
SortNum(L);
Display(L);
}
if(n==2)
{
printf("班级中所有学生的信息如下: \n");
SortScore(L);
Display(L);
}
printf("*************欢迎下次进入*******************\n");
break;
}
case 4:
{
system("cls");
printf("**************欢迎进入到班级信息查询系统******\n");
printf("请输入你所要插入的学生的学号: \n");
getchar();
scanf("%s",&Num);
Insert(L, Num);
printf("*************欢迎下次进入*******************\n");
break;
}
case 5:
{
system("cls");
printf("**************欢迎进入到班级信息查看功能区******\n");
printf("管理员进入系统\n");
printf("**************请输入1查看已录入的信息******\n");
scanf("%d",&n);
if(n==1)
{
Display(L);
}
printf("*************欢迎下次进入*******************\n");
break;
}
case 6:
{
system("cls");
printf("**************欢迎进入到班级信息修改功能区******\n");
printf("请输入需要修改信息的学生学号: \n");
getchar();
scanf("%s",&Num);
Alter(L,Num);
printf("*************欢迎下次进入*******************\n");
break;
}
case 7:
{
system("cls");
printf("**************欢迎进入到班级信息的删除功能区******\n");
printf("请输入所要删除的学生的学号: \n");
getchar();
scanf("%s",&Num);
printf("是否确定删除该同学:(Y/N)");
scanf("%s",&m);
if(m=='Y')
{
Del(L, Num);
}
else
{
printf("输入错误,请重新输入Y/N");
}
printf("*************欢迎下次进入*******************\n");
break;
}
case 0:
{
x=0;
printf("欢迎你下次进入学生管理系统 \n");
break;
default:
break;
}
}
}
return 0;
}
源文件allf.cpp
-
/***************************************
-
*版权所有 (C)2016,renzexi
-
*文件名称:allf.cpp
-
*文件标识:无
-
*内容摘要:每个函数功能的具体实现
-
*其他说明:无
-
*当前版本:V1.0
-
*作者:任泽西
-
*完成时间:20171222
-
*修改记录:修改了成绩显示错误的bug
-
*修改时间:20171222
-
*版本号:V1.0
-
*修改人:renzexi
-
****************************************/
-
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include "action.h"
/***************************************************************************************
*功能描述:修改学生的个人信息
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void Alter(Linklist *L,char Num[100])//修改学生的个人信息
{
Linklist *p;
p=L;
int s;
while(p)
{
if(strcmp(p->data.Num,Num)==0)
{
printf("请输入你要修改的学生的信息:1.修改学号 2.修改姓名 3.修改手机号 4.修改邮箱 5.修改班级 6.修改专业课程 7.修改专业成绩\n");
printf("请选择操作序号:");
scanf("%d",&s);
switch(s)
{
case 1:
{
printf("请输入要修改的学号: ",p->data.Num);
scanf("%s",p->data.Num);
printf("该学生的信息修改成功\n");
break;
}
case 2:
{
printf("请输入要修改的姓名: ",p->data.Name);
scanf("%s",p->data.Name);
printf("该学生的信息修改成功\n");
break;
}
case 3:
{
printf("请输入要修改的手机号: ",p->data.telNumber);
scanf("%s",p->data.telNumber);
printf("该学生的信息修改成功\n");
break;
}
case 4:
{
printf("请输入要修改的邮箱号: ",p->data.email);
scanf("%s",p->data.email);
printf("该学生的信息修改成功\n");
break;
}
case 5:
{
printf("请输入要修改的班级: ",p->data.className);
scanf("%s",p->data.className);
printf("该学生的信息修改成功\n");
break;
}
case 6:
{
printf("请输入要修改的专业课程: ",p->data.course);
scanf("%s",p->data.course);
printf("该学生的信息修改成功\n");
break;
}
case 7:
{
printf("请输入要修改的专业成绩: ",p->data.score);
scanf("%d",&p->data.score);
printf("该学生的信息修改成功\n");
break;
default:
break;
}
}
}
p=p->next;
}
}
/***************************************************************************************
*功能描述:运用头插法建立单链表
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void Creatlist(Linklist *&L)//头插法生成单链表
{
Linklist *s;
s=(Linklist *)malloc(sizeof(Linklist));
printf("请输入学生的个人信息\n");
printf("学号: \n");
scanf(" %s",s->data.Num);
printf("姓名: \n");
scanf(" %s",s->data.Name);
printf("班级: \n");
scanf(" %s",s->data.className);
printf("手机号: \n");
scanf(" %s",s->data.telNumber);
printf("邮箱: \n");
scanf(" %s",s->data.email);
printf("专业课程: \n");
scanf(" %s",s->data.course);
printf("专业成绩: \n");
scanf(" %d",&s->data.score);
s->next=L->next;
L->next=s;
}
/***************************************************************************************
*功能描述:按学号进行删除
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void Del(Linklist *&L, char Num[100])//按学号进行删除
{
Linklist *p,*q;
p=L;
q=L->next;
char flag=0;
while(q)
{
if(strcmp(q->data.Num,Num)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("对不起,该学号的学生不存在 \n");
}
printf("删除成功\n");
}
/***************************************************************************************
*功能描述:显示学生的信息
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void Display(Linklist *&L)//显示学生信息
{
Linklist *p;
p=L->next;
char flat=0;
while(p)
{
printf("学号\t姓名\t班级\t手机号\t邮箱\t专业课程\t成绩\n");
for(p=L->next;p;p=p->next)
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t %d\n",p->data.Num,p->data.Name,p->data.className,p->data.telNumber,p->data.email,p->data.course,p->data.score);
flat=1;
}
}
if(!flat)
{
printf("无法显示学生的信息,请进入其他功能区 \n");
}
}
/***************************************************************************************
*功能描述:初始化线性表
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void Initlist(Linklist *&L)//初始化线性表
{
L=(Linklist *)malloc(sizeof(Linklist));
L->next=NULL;
}
/***************************************************************************************
*功能描述:实现学生信息的插入
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void Insert(Linklist *&L, char Num[100])//插入信息
{
Linklist *p,*s;
p=L->next;
while(p)
{
if(strcmp(p->data.Num,Num)!=0)
{
s=(Linklist *)malloc(sizeof(Linklist));
printf("请输入学生的个人信息\n");
printf("学号:");
scanf("%s",s->data.Num);
printf("姓名:");
scanf("%s",s->data.Name);
printf("班级:");
scanf("%s",s->data.className);
printf("手机号:");
scanf("%s",s->data.telNumber);
printf("邮箱:");
scanf("%s",s->data.email);
printf("专业课程:");
scanf("%s",s->data.course);
printf("专业成绩:");
scanf("%d",&s->data.score);
s->next=p->next;
p->next=s;
printf("插入新的学生信息成功\n");
}
if(strcmp(p->data.Num,Num)==0)
{
printf("该同学已存在,插入失败,请重新输入 \n");
}
break;
}
}
/***************************************************************************************
*功能描述:按姓名进行查询
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void SearchName(Linklist *L,char Name[100])//姓名查询
{
Linklist *p;
p=L;
char flat=0;
while(p)
{
if(p!=NULL)
{
if(strcmp(p->data.Name,Name)==0)
{
printf("学号: %s\n",p->data.Num);
printf("姓名: %s\n",p->data.Name);
printf("班级: %s\n",p->data.className);
printf("手机号: %s\n",p->data.telNumber);
printf("邮箱: %s\n",p->data.email);
printf("专业课程: %s\n",p->data.course);
printf("专业成绩: %d\n",p->data.score);
flat=1;
}
}
p=p->next;
}
if(!flat)
{
printf("对不起输入姓名错误或该同学已被删除,请重新输入进行查询 \n");
}
}
/***************************************************************************************
*功能描述:按学号进行查询
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void SearchNum(Linklist *L,char Num[100])//学号查询
{
Linklist *p;
p=L;
char flat=0;
while(p)
{
if(p!=NULL)
{
if(strcmp(p->data.Num,Num)==0)
{
printf("学号: %s\n",p->data.Num);
printf("姓名: %s\n",p->data.Name);
printf("班级: %s\n",p->data.className);
printf("手机号: %s\n",p->data.telNumber);
printf("邮箱: %s\n",p->data.email);
printf("专业课程: %s\n",p->data.course);
printf("专业成绩: %d\n",p->data.score);
flat=1;
}
}
p=p->next;
}
if(!flat)
{
printf("对不起输入学号错误或该同学已被删除,请重新输入进行查询 \n");
}
}
/***************************************************************************************
*功能描述:按学号进行排序
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void SortNum(Linklist *L)//按学号排序
{
Linklist *p,*q;
stu temp;
for(p=L->next;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(strcmp(p->data.Num,q->data.Num)>0)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
}
/***************************************************************************************
*功能描述:按成绩进行排序
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:消息字段之间用分号(;)隔离
***************************************************************************************/
void SortScore(Linklist *L)//按成绩排序
{
Linklist *p,*q;
stu temp;
for(p=L->next;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if((p->data.score,q->data.score)>0)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
}
项目实现结果
(1) 已录入多个学生信息
(2) 进行2查询中的1按姓名查询


(3) 进行3排序中的1按学号排序


(4) 进行4插入信息


(5) 进行5浏览信息


(6) 进行6修改信息


(7)进行7删除信息


(8) 再次进行5浏览信息,查看修改和删除操作是否实现
