用C语言编程学生籍贯管理系统
来源:网络收集 点击: 时间:2024-05-22本学生籍贯信息管理系统采用Visual C++6.0作为开发环境,处理对象为学生,主要功能对学生籍贯信息进行录入、删除、查找、修改、显示输出等。本系统给用户提供了一个简易的操作界面,以便根据提示输入操作项,调用相应函数来完成系统提供的各项管理功能。
2/7人机操控平台:用户通过选择不同选项来操作系统,包括退出系统,导入学生信息,删除学生信息,查询学生信息,修改学生信息,游览学生信息以及作者信息。

导入学生信息:用户根据提示输入学生的学号、姓名、性别、出生日期、手机号码、籍贯等信息。本系统一次只录入一个联系人信息,当需要录入多个学生信息时,可采用多次添加方式。




删除学生信息:根据系统提示,用户输入要删除的学生信息的学号,系统根据用户的输入进行查找,若没有查找到相关记录,则提示“此联系人不存在”;否则,系统将直接删除该联系人的全部信息。


查询学生信息:本系统提供三种查找学生信息的方式,即按学号查找、按姓名查找和按籍贯查找。用户根据系统提示选择相应的查找方式,若选择按学号查找,则需要输入相应学生的学号以完成信息查找;若选择按姓名查找,则需要输入相应学生的姓名以完成信息查找;若选择按籍贯查找,则需要输入想要查找的机关。系统中若存在待查找的联系人,则输出该联系人的信息;否则提示“此联系人不存在”。




修改学生信息:根据系统提示,用户输入待修改学生信息的学号,若没有查到相关记录,则提示“此学生不存在”;否则提示用户逐一输入修改后的姓名、性别、出生日期、手机号码、籍贯等信息。

游览学生信息:若系统中存在学生记录,则逐一输出所有学生信息;否则输出“该系统中无学生信息”。

//文件包含
#includestdio.h //标准输入输出函数库
#includestdlib.h //标准函数库
#includestring.h //字符串函数库
#includeconio.h //控制台输入输出函数库
//学生信息长度宏定义
#define MAX_ID 12 //学号最大长度
#define MAX_NAME 11 //姓名最大长度
#define MAX_SEX 3 //性别最大长度
#define MAX_BIRTH 11 //出生年月日最大长度
#define MAX_ADDR 101 //籍贯最大长度
#define MAX_TEL 12 //手机号码最大长度
//系统菜单选项宏定义
#define EXIT 0 //退出系统
#define INPUT 1 //导入学生信息
#define DELETE 2 //删除学生信息
#define SEARCH 3 //查询学生信息
#define UPDATE 4 //修改学生信息
#define OUTPUT 5 //游览学生信息
#define ABOUT 6 //关于作者
//学生籍贯信息查找方式宏定义
#define SEARCH_ID 1 //按学号查找
#define SEARCH_NAME 2 //按姓名查找
#define SEARCH_ADDR 3 //按籍贯查找
//学生籍贯信息结构体
typedef struct _StuInfo
{
char id; //学号
char name; //姓名
char sex; //性别
char birth; //出生年月
char addr; //籍贯
char tel; //手机号码
}StuInfo;
//学生籍贯信息单链表结构体
typedef struct _StuNode //链表结点
{
StuInfo stu;
struct _StuNode *next;
}StuNode;
typedef StuNode* StuList; //链表
//全局变量定义,用于保存所有联系人信息的单链表
StuList student=NULL; //初始化链表为空
//人机界面操作函数列表
void ShowMenu(); //人机界面函数
void AddStu(); //导入学生信息
void DeleteStu(); //删除学生信息
void SearchStu(); //查询学生信息
void SearchStuID(); //按学号查找
void SearchStuName(); //按姓名查找
void SearchStuAddr(); //按籍贯查找
void UpdateStu(); //修改学生信息
void OutputStu(); //游览学生信息
void Exit(); //退出系统
void About(); //作者信息
//辅助函数列表
void ReadFile(); //从文件读出学生信息
void WriteFile(); //将学生信息写入文件
//查找学生在系统是否存在,存在返回1,不存在返回0
int FindStu(char* id);
void ShowMenu()
{
int typeID=0;
ReadFile(); //启动程序前从文件student.txt读出通讯录中联系人信息
while(1)
{
system(cls); //清屏
printf(******************************\n);
printf(* 学生籍贯信息管理系统 *\n);
printf(******************************\n);
printf(** 0 - 退出系统 **\n);
printf(** 1 - 导入学生信息 **\n);
printf(** 2 - 删除学生信息 **\n);
printf(** 3 - 查询学生信息 **\n);
printf(** 4 - 修改学生信息 **\n);
printf(** 5 - 游览学生信息 **\n);
printf(** 6 - 关于作者 **\n);
printf(******************************\n);
printf(-请选择操作:);
scanf(%d,typeID);
if(typeID == EXIT)
{
WriteFile(); //程序退出前将学生籍贯信息导入文件
Exit(); //退出系统
break;
}
switch(typeID)
{
case INPUT:
system(cls);
AddStu(); //导入学生信息
system(pause); //程序暂停
break;
case DELETE:
system(cls);
DeleteStu(); //删除学生信息
system(pause);
break;
case SEARCH:
SearchStu(); //查询学生信息
break;
case UPDATE:
system(cls);
UpdateStu(); //修改学生信息
system(pause);
break;
case OUTPUT:
system(cls);
OutputStu(); //游览学生信息
system(pause);
break;
case ABOUT:
system(cls);
About(); //作者信息
system(pause);
break;
default:
printf(输入有误!\n);
system(pause);
break;
}
}
}
void AddStu()
{
//分配存储空间
StuNode *p = (StuNode*)malloc(sizeof(StuNode));
printf(****************************************\n);
printf(** 请输入学生籍贯信息 **\n);
printf(@请输入学号(最大长度为%d个字符)\n-,MAX_ID-1);
scanf(%s,p-stu.id);
while(FindStu(p-stu.id)==1)
{
printf(@此学生信息已经存在,请重新输入\n-);
scanf(%s,p-stu.id);
}
printf(@请输入姓名(最大长度为%d个字符)\n-,MAX_NAME-1);
scanf(%s,p-stu.name);
printf(@请输入性别(男或女)\n-);
scanf(%s,p-stu.sex);
printf(@请输入出生日期(格式为1984-01-10)\n-);
scanf(%s,p-stu.birth);
printf(@请输入籍贯(最大长度为%d个字符)\n-,MAX_ADDR-1);
scanf(%s,p-stu.addr);
printf(@请输入手机号码\n-);
scanf(%s,p-stu.tel);
p-next = student;
student = p;
printf(** 学生籍贯信息添加成功! **\n);
printf(**************************************\n);
}
void DeleteStu()
{
StuNode *pre=student; //前一结点
StuNode *p=student; //当前结点
char id;
printf(*******************************\n);
printf(**请输入要删除学生的学号:\n-);
scanf(%s,id);
while(p) //查找待删除结点
{
if(strcmp(p-stu.id,id)==0)
break;
pre=p;
p=p-next;
}
if(!p)
printf(** 此学生不存在! **\n);
else
{
if(p==student) student=p-next;
else pre-next=p-next;
free(p);
printf(** 删除成功! **\n);
}
printf(****************************************\n);
}
void SearchStu()
{
int type,flag=1;
while(flag)
{
system(cls);
printf(****************************\n);
printf(* 1 - 按学号查找 *\n);
printf(* 2 - 按姓名查找 *\n);
printf(* 3 - 按籍贯查找 *\n);
printf(-选择查找方式:);
printf(****************************\n);
scanf(%d,type);
switch(type)
{
case SEARCH_ID:
system(cls);
SearchStuID(); //按学号查找
flag=0;
break;
case SEARCH_NAME:
system(cls);
SearchStuName(); //按姓名查找
flag=0;
break;
case SEARCH_ADDR:
system(cls);
SearchStuAddr(); //按籍贯查找
flag=0;
break;
default:
printf(输入有误!\n);
break;
}
system(pause);
}
}
void SearchStuID()
{
StuNode *p=student;
char id;
printf(****************************\n);
printf(**请输入要查找学生的学号 :\n-);
scanf(%s,id);
while(p) //检查待查找学生是否存在
{
if(strcmp(p-stu.id,id)==0)
break;
p=p-next;
}
if(!p)
{
printf(** 此学生不存在! **\n);
printf(*******************************\n);
}
else //待查找学生存在则输出信息
{
printf(****************************\n);
printf(* 学生籍贯信息 *\n);
printf(****************************\n);
printf($学 号 :%s\n,p-stu.id);
printf($姓 名 :%s\n,p-stu.name);
printf($性 别 :%s\n,p-stu.sex);
printf($出生日期:%s\n,p-stu.birth);
printf($籍 贯 :%s\n,p-stu.addr);
printf($手机号码:%s\n,p-stu.tel);
printf(****************************\n);
}
}
void SearchStuName()
{
StuNode *p=student;
char name;
printf(****************************\n);
printf(**请输入要查找学生的姓名 :\n-);
scanf(%s,name);
while(p) //检查待查找学生是否存在
{
if(strcmp(p-stu.name,name)==0)
break;
p=p-next;
}
if(!p)
{
printf(** 此学生不存在! **\n);
printf(*******************************\n);
}
else //待查找学生存在则输出信息
{
printf(****************************\n);
printf(* 学生籍贯信息 *\n);
printf(****************************\n);
printf($学 号 :%s\n,p-stu.id);
printf($姓 名 :%s\n,p-stu.name);
printf($性 别 :%s\n,p-stu.sex);
printf($出生日期:%s\n,p-stu.birth);
printf($籍 贯 :%s\n,p-stu.addr);
printf($手机号码:%s\n,p-stu.tel);
printf(****************************\n);
}
}
void SearchStuAddr()
{
StuNode *p=student;
char addr;
printf(****************************\n);
printf(**请输入要查找学生的籍贯 :\n-);
scanf(%s,addr);
while(p) //检查待查找学生是否存在
{
if(strcmp(p-stu.addr,addr)==0)
break;
p=p-next;
}
if(!p)
{
printf(** 此学生不存在! **\n);
printf(*******************************\n);
}
else //待查找学生存在则输出信息
{
printf(****************************\n);
printf(* 学生籍贯信息 *\n);
printf(****************************\n);
printf($学 号 :%s\n,p-stu.id);
printf($姓 名 :%s\n,p-stu.name);
printf($性 别 :%s\n,p-stu.sex);
printf($出生日期:%s\n,p-stu.birth);
printf($籍 贯 :%s\n,p-stu.addr);
printf($手机号码:%s\n,p-stu.tel);
printf(****************************\n);
}
}
void UpdateStu()
{
StuNode *p=student;
char id;
printf(****************************\n);
printf(**请输入要更新学生的学号 :\n-);
scanf(%s,id);
while(p) //查找待修改结点
{
if(strcmp(p-stu.id,id)==0)
break;
p=p-next;
}
if(!p)
{
printf(** 此学生不存在! **\n);
printf(*******************************\n);
}
else
{
printf(-$原姓名:%s\n,p-stu.name);
printf(-新姓名:);
scanf(%s,p-stu.name);
printf(-$原性别:%s\n,p-stu.sex);
printf(-新性别:);
scanf(%s,p-stu.sex);
printf(-$原出生日期:%s\n,p-stu.birth);
printf(-新出生日期:);
scanf(%s,p-stu.birth);
printf(-$原联系地址:%s\n,p-stu.addr);
printf(-新联系地址:);
scanf(%s,p-stu.addr);
printf(-$原手机号码:%s\n,p-stu.tel);
printf(-新手机号码:);
scanf(%s,p-stu.tel);
printf(** 修改成功! **\n);
printf(*******************************\n);
}
}
void OutputStu()
{
int i=0;
StuNode *p=student;
if(!p) //链表为空
{
printf(****************************\n);
printf(** 系统中无学生人记录 **\n);
printf(****************************\n);
return;
}
while(p)
{
printf(**********************************\n);
printf(* 学生%d信息 *\n,++i);
printf(**********************************\n);
printf(****************************\n);
printf(* 学生籍贯信息 *\n);
printf(****************************\n);
printf($学 号 :%s\n,p-stu.id);
printf($姓 名 :%s\n,p-stu.name);
printf($性 别 :%s\n,p-stu.sex);
printf($出生日期:%s\n,p-stu.birth);
printf($籍 贯 :%s\n,p-stu.addr);
printf($手机号码:%s\n,p-stu.tel);
printf(****************************\n);
p=p-next;
}
}
void Exit()
{
StuNode *p=student;
while(p) //释放通讯录每一个结点内存空间
{
student=p-next;
free(p);
p=student;
}
}
void ReadFile()
{
StuNode *p;
char id;
FILE *pf=fopen(student.txt,r); //以读方式打开文件
if(!pf) return; //打开文件失败
//从文件中逐一读出每一联系人信息
while(fscanf(pf,%s,id)!=EOF)
{
p=(StuNode*)malloc(sizeof(StuNode));
strcpy(p-stu.id,id);
fscanf(pf,%s,p-stu.name);
fscanf(pf,%s,p-stu.sex);
fscanf(pf,%s,p-stu.birth);
fscanf(pf,%s,p-stu.addr);
fscanf(pf,%s,p-stu.tel);
//每一联系人加入到链表中
p-next=student;
student=p;
p=NULL;
}
fclose(pf); //关闭文件
}
void WriteFile()
{
StuNode *p=student;
FILE *pf=fopen(student.txt,w); //以写方式打开文件
if(!pf) return; //打开文件失败
while(p) //将链表中的每一结点写入文件
{
fprintf(pf,%s,p-stu.id);
fscanf(pf,%s,p-stu.name);
fscanf(pf,%s,p-stu.sex);
fscanf(pf,%s,p-stu.birth);
fscanf(pf,%s,p-stu.addr);
fscanf(pf,%s,p-stu.tel);
p=p-next;
}
fclose(pf); //关闭文件
}
int FindStu(char* id)
{
StuNode *p=student;
while(p) //在链表中以学号方式查找某一联系人是否存在
{
if(strcmp(id,p-stu.id)==0)
return 1; //存在则返回1
p=p-next;
}
return 0; //不存在则返回0
}
void About()
{
printf(********************************\n);
printf(* *\n);
printf(*作者:依筱糯流 *\n);
printf(* *\n);
printf(********************************\n);
system(pause);
}
void main()
{
ShowMenu();
}
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_829476.html