学生籍贯信息管理系统java_用C语言编程学生籍贯管理系统

这是一个使用C语言编写的学籍管理系统,能够进行学生信息的导入、删除、查询、修改和显示。系统通过单链表存储学生信息,包括学号、姓名、性别、出生年月、籍贯和手机号码等字段,并提供了按学号、姓名和籍贯查找的功能。程序还具备文件操作功能,可以将数据持久化到文件中。
摘要由CSDN通过智能技术生成

//文件包含

#include               //标准输入输出函数库

#include              //标准函数库

#include              //字符串函数库

#include               //控制台输入输出函数库

//学生信息长度宏定义

#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[MAX_ID];            //学号

char name[MAX_NAME];        //姓名

char sex[MAX_SEX];          //性别

char birth[MAX_BIRTH];      //出生年月

char addr[MAX_ADDR];        //籍贯

char tel[MAX_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[MAX_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[MAX_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[MAX_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[MAX_NAME];

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[MAX_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[MAX_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();

}

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值