student.h头文件代码:
/***************************************
*版权所有 (C)2015,Gao Jinyan
*
*文件名称:student.h
*文件标识:无
*内容摘要:定义数据和函数声明
*其他说明:无
*当前版本:V1.0
*作者:高金艳
*完成时间:20161228
*
*修改记录:
*修改时间:20161228
*版本号:V1.0
*修改人:Gao Jinyan
*修改内容:创建
****************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#define STUDENT 2
typedef struct student //结构体
{
int num; //学号
char name[10]; //姓名
char youxiang[10]; //邮箱
char dianhua[20]; //电话
char zhuzhi[10]; //住址
struct student *next; //指向下一个学生的指针
} student;
char filename[10];
student *quanju; //定义全局变量,用来存放学生的信息
int length; //链表的长度
void jiemian(void); //界面函数的声明
void jiemian_tianjia(void); //添加学生信息函数的声明
void jiemian_xianshi(void); //显示学生信息函数的声明
void jiemian_chaxun(void); //查询学生信息函数的声明
void jiemian_shanchu(void); //删除学生信息函数的声明
void jiemian_charu(void); //插入学生信息函数的声明
void jiemian_xiugai(void); //修改学生信息函数的声明
void jiemian_paixu(void); //排序函数声明
void chaxun_xuehao(void); //按学号查询学生信息函数的声明
void chaxun_name(void); //按姓名查询学生信息函数的声明
void shanchu_xuehao(void); //按学号删除学生信息函数的声明
void shanchu_name(void); //按姓名删除学生信息函数的声明
void xiugai_xuehao(void); //按学号修改学生信息函数的声明
void xiugai_name(void); //按姓名修改学生信息函数的声明
void Creatfile_new(student *head); //保存文件
/***************************************
*版权所有 (C)2015,Gao Jinyan
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:每个函数的实现及主函数
*其他说明:无
*当前版本:V1.0
*作者:高金艳
*完成时间:20161228
*
*修改记录:
*修改时间:20161228
*版本号:V1.0
*修改人:Gao Jinyan
*修改内容:创建
****************************************/
#include "student.h"
int main(void) //主函数
{
jiemian(); //调用“界面”函数
return 0;
}
/***********************************************************
* 功能描述: 界面函数
* 输入参数: 所需功能代号
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void jiemian(void) //"界面函数"的定义
{
while(1) //让循环一直循环下去,除非break跳出
{
printf(" \n");
printf(" \n");
printf(" $$$$$$$$$$$$$$$*** 学生信息管理系统 ***$$$$$$$$$$$$$$$ \n");
printf(" \n");
printf(" \n");
printf(" *******************************************************\n");
printf(" * (1)添加学生信息 * \n");
printf(" * * \n");
printf(" * (2)显示学生信息 * \n");
printf(" * * \n");
printf(" * (3)查询学生信息 * \n");
printf(" * * \n");
printf(" * (4)删除学生信息 * \n");
printf(" * * \n");
printf(" * (5)插入学生信息 * \n");
printf(" * * \n");
printf(" * (6)修改学生信息 * \n");
printf(" * * \n");
printf(" * (7)按学号排序 * \n");
printf(" * * \n");
printf(" * (8)退出系统 * \n");
printf(" *******************************************************\n");
printf("请选择您要进行的操作的数字: \n");
int a;
cin>>a;
while(a!=1&&a!=2&&a!=3&&a!=4&&a!=5&&a!=6&&a!=7&&a!=8) //如果输入的是1、2、3、4、5、6、7、8之外的数,那么提示输入错误
{
printf("操作有误,请重新输入数字!\n");
cin>>a;
}
switch(a)
{
case 1:jiemian_tianjia();
break;
case 2:jiemian_xianshi();
break;
case 3:jiemian_chaxun();
break;
case 4:jiemian_shanchu();
break;
case 5:jiemian_charu();
break;
case 6:jiemian_xiugai();
break;
case 7:jiemian_paixu();
break;
case 8:exit(0);
}
}
}
/***********************************************************
* 功能描述: 添加学生信息
* 输入参数: 学生信息
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void jiemian_tianjia(void) //"添加学生信息"函数的定义
{
student *p1,*p2;
length=0;
int number=0;
p1=(student *)malloc(sizeof(student)); //对p1分配空间
if(quanju==NULL)
quanju=p1;
printf("请输入保存文件名字:");
scanf("%s",filename);
printf("请输入学生的学号、姓名、邮箱、电话、住址:\n");
while(number<=3)
{
p2=(student *)malloc(sizeof(student)); //对p2分配空间
scanf("%d %s %s %s %s",&p2->num,p2->name,p2->youxiang,p2->dianhua,p2->zhuzhi); //输入学生信息
if(p2->num==0)
{
printf("学生信息建立完成!\n");
break;
}
length++; //增加链表的长度
p1->next=p2;
p2->next=NULL;
p1=p1->next; //移动指针,指向下一结点
number++;
}
Creatfile_new(quanju); //
return ;
}
/***********************************************************
* 功能描述: 显示学生信息
* 输入参数:
* 输出参数: 所有学生的信息
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void jiemian_xianshi(void) //"显示学生信息"函数的定义
{
student *p=quanju->next; //p指向了第一个
printf("所有的学生信息如下:\n");
while(p!=NULL)
{
printf("%d %s %s %s %s\n",p->num,&p->name,&p->youxiang,&p->dianhua,&p->zhuzhi);
p=p->next;
}
return ;
}
/***********************************************************
* 功能描述: 查询学生信息
* 输入参数: 查询类型代码
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void jiemian_chaxun(void) //"查询学生信息"函数定义
{
int b;
while(1)
{
printf("(1)按学号查询\n");
printf("(2)按姓名查询\n");
printf("(3)返回主页面\n");
printf("请选择您要查询的类型:\n");
cin>>b;
while(b!=1&&b!=2&&b!=3)
{
printf("操作有误,请重新输入数字!\n");
cin>>b;
}
switch(b)
{
case 1:chaxun_xuehao();
break;
case 2:chaxun_name();
break;
case 3:jiemian();
break;
}
}
}
/***********************************************************
* 功能描述: 按学号查询学生信息
* 输入参数: 要查询的学生学号
* 输出参数: 该学生的信息
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void chaxun_xuehao(void) //"按学号查询学生信息"函数的定义
{
int num;
student *p=quanju->next;
printf("要查询的学生学号为:");
scanf("%d",&num);
while(p!=NULL)
{
if(p->num==num)
{
printf("该学生的信息如下:");
printf("%d %s %s %s %s\n",p->num,&p->name,&p->youxiang,&p->dianhua,&p->zhuzhi);
return;
}
p=p->next;
}
if(p==NULL)
printf("没有此学号的学生!\n");
return ;
}
/***********************************************************
* 功能描述: 按姓名查询学生信息
* 输入参数: 要查询的学生姓名
* 输出参数: 该学生的信息
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void chaxun_name(void) //"按姓名查询学生信息"函数的定义
{
char name[10];
student *p=quanju->next;
printf("要查询的学生姓名为:");
scanf("%s",&name);
while(p!=NULL)
{
if(!(strcmp(p->name,name))) //判断两个名字是否相等,(两个字符串相等就继续执行,不相等就跳出)
{
printf("该学生的信息如下:");
printf("%d %s %s %s %s\n",p->num,&p->name,&p->youxiang,&p->dianhua,&p->zhuzhi);
return;
}
p=p->next;
}
if(p==NULL)
printf("没有此姓名的学生!\n");
return ;
}
/***********************************************************
* 功能描述: 删除学生信息
* 输入参数: 删除类型代码
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void jiemian_shanchu(void) //"删除学生信息"函数的定义
{
int c;
while(1)
{
printf("(1)按学号删除\n");
printf("(2)按姓名删除\n");
printf("(3)返回主页面\n");
printf("请选择您要删除的类型:\n");
cin>>c;
while(c!=1&&c!=2&&c!=3)
{
printf("操作有误,请重新输入数字!\n");
cin>>c;
}
switch(c)
{
case 1:shanchu_xuehao();
break;
case 2:shanchu_name();
break;
case 3:jiemian();
break;
}
}
}
/***********************************************************
* 功能描述: 按学号删除学生信息
* 输入参数: 要删除的学生学号
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void shanchu_xuehao(void) //"按学号删除学生信息"函数的定义
{
int num;
student *p,*q;
q=quanju,p=quanju->next;
printf("要删除的学生的学号为:\n");
scanf("%d",&num);
while(p!=NULL)
{
if(p->num==num)
{
q->next=p->next;
free(p);
length--;
printf("删除成功!\n");
return ;
}
p=p->next;
q=q->next;
}
if(p==NULL)
{
printf("没有该学号的学生!\n");
return ;
}
}
/***********************************************************
* 功能描述: 按姓名删除学生信息
* 输入参数: 要删除的学生姓名
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void shanchu_name(void) //"按姓名删除学生信息"函数的定义
{
char name[10];
student *p,*q;
q=quanju,p=quanju->next;
printf("要删除的学生的姓名为:\n");
scanf("%s",&name);
while(p!=NULL)
{
if(!(strcmp(p->name,name)))
{
q->next=p->next;
free(p);
length--;
printf("删除成功!\n");
return ;
}
p=p->next;
q=q->next;
}
if(p==NULL)
{
printf("没有该姓名的学生!\n");
return ;
}
}
/***********************************************************
* 功能描述: 插入学生信息
* 输入参数: 要插入的位置
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void jiemian_charu(void) //"插入学生信息"函数的定义
{
int n,i;
student *p,*q;
p=quanju;
printf("请输入你要插入位置: ");
scanf("%d",&n);
n=n-1;
if(n>length)
{
printf("找不到要插入的位置!\n");
return ;
}
else
{
printf("请输入您要插入的学生的学号、姓名、邮箱、电话、住址:\n");
q=(student *)malloc(sizeof(student));
scanf("%d %s %s %s %s",&q->num,q->name,q->youxiang,q->dianhua,q->zhuzhi);
while(p!=NULL)
{
if(p->num==q->num)
{
printf("该学号已经存在,无法插入信息!\n");
return ;
}
p=p->next;
}
p=quanju;
for(i=0; i<n; i++)
p=p->next;
q->next=p->next;
p->next=q;
length++;
printf("插入学生信息成功!\n");
return ;
}
}
/***********************************************************
* 功能描述: 修改学生信息
* 输入参数: 修改类型代码
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void jiemian_xiugai(void) //"修改学生信息"函数定义
{
int d;
while(1)
{
printf("(1)按学号修改\n");
printf("(2)按姓名修改\n");
printf("(3)返回主页面\n");
printf("请选择您要修改的类型:\n");
cin>>d;
while(d!=1&&d!=2&&d!=3)
{
printf("操作有误,请重新输入数字!\n");
cin>>d;
}
switch(d)
{
case 1:xiugai_xuehao();
break;
case 2:xiugai_name();
break;
case 3:jiemian();
break;
}
}
}
/***********************************************************
* 功能描述: 按学号修改学生信息
* 输入参数: 要修改的学生姓名
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void xiugai_xuehao(void) //"按学号修改学生信息"函数定义
{
struct student *p,*q;
int num;
printf("请输入您要修改的学号: ");
scanf("%d",&num);
p=quanju;
while(p!=NULL)
{
if(p->num==num)
{
while(1)
{
q=(struct student*)malloc(sizeof(student));
printf("请重新输入该学生的信息:");
scanf("%d %s %s %s %s",&q->num,q->name,q->youxiang,q->dianhua,q->zhuzhi);
q->num=p->num; //覆盖
strcpy(p->name,q->name);
strcpy(p->youxiang,q->youxiang);
strcpy(p->dianhua,q->dianhua);
strcpy(p->zhuzhi,q->zhuzhi);
q->next = NULL;
return ;
}
}
p = p->next;
}
printf("不存在此学号的学生!");
}
/***********************************************************
* 功能描述: 按姓名修改学生信息
* 输入参数: 要修改的学生姓名
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void xiugai_name(void) //"按姓名修改学生信息"函数定义
{
struct student *p,*q;
char name[10];
printf("请输入您要修改的姓名: ");
scanf("%s",&name);
p=quanju;
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
while(1)
{
printf("请重新输入该学生的信息:");
q=(struct student*)malloc(sizeof(student));
scanf("%d %s %s %s %s",&q->num,q->name,q->youxiang,q->dianhua,q->zhuzhi);
q->num=p->num; //覆盖
strcpy(p->name,q->name);
strcpy(p->youxiang,q->youxiang);
strcpy(p->dianhua,q->dianhua);
strcpy(p->zhuzhi,q->zhuzhi);
q->next = NULL;
return ;
}
}
p = p->next;
}
printf("不存在此姓名的学生!");
}
/***********************************************************
* 功能描述: 按学号将学生信息排序
* 输入参数:
* 输出参数: 按学号排好的学生信息
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void jiemian_paixu(void) //排序函数定义
{
student *p1,*p2,*p;
int num;
char name[10];
char youxiang[10];
char dianhua[20];
char zhuzhi[10];
p1=quanju;
while (p1!=NULL)
{
p2 = p1->next;
while (p2!=NULL)
{
if (p2->num<p1->num)
{
num=p2->num;
strcpy(name, p2->name);
strcpy(youxiang, p2->youxiang);
strcpy(dianhua, p2->dianhua);
strcpy(zhuzhi, p2->zhuzhi);
p2->num=p1->num;
strcpy(p2->name, p1->name);
strcpy(p2->youxiang, p1->youxiang);
strcpy(p2->dianhua, p1->dianhua);
strcpy(p2->zhuzhi, p1->zhuzhi);
p1->num=num;
strcpy(p1->name, name);
strcpy(p1->youxiang, youxiang);
strcpy(p1->dianhua, dianhua);
strcpy(p1->zhuzhi, zhuzhi);
}
p2 = p2->next;//指向下一个节点
}
p1 = p1->next;//指向下一个节点
}
p=quanju->next;
printf("排序之后的学生信息为:\n");
while(p!=NULL)
{
printf("%d %s %s %s %s\n",p->num,p->name,p->youxiang,p->dianhua,p->zhuzhi);
printf("\n");
p = p->next;
}
}
/***********************************************************
* 功能描述: 保存文件
* 输入参数:
* 输出参数:
* 返回值 : 0
* 其它说明: 学生信息包括学号、姓名、邮箱、电话、住址
************************************************************/
void Creatfile_new(student *head) //保存文件
{
FILE *fp;
struct student *p=head;
if((fp = fopen(filename, "wb"))==NULL)
printf("Error File!\n");
while(p!=NULL)
{
if(fwrite(p,sizeof(struct student),1,fp)!=1)
{
printf("****Error Write!****\n");
fclose(fp);
return;
}
p=p->next;
}
fclose(fp);
}
运行结果: