#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef struct pnode //结构体定义 用于存放学生信息的节点
{
char name [100]; //姓名
char ID[200]; //学号
char dorm[300]; //房号
char bednum[100]; //床位号
char group[200]; //班级
}student;
char filename[200]="data.txt"; //文件名
FILE *fp; //指向文件的指针
void creat() // 创建一个二进制文件 用于存放学生数据
{
student *person;
person=(student *)malloc(sizeof(student)); //为节点分配内存
if((fp=fopen(filename,"a+"))==NULL)
{exit(0);}
printf("data.txt文件已创建。\n\n");
printf("\n请输入学生的姓名 学号 房号 床位号 班级 用空格隔开 以#结束\n");
scanf("%s",person->name);
while(strcmp(person->name,"#")) //该循环用于控制学生信息的录入 遇#结束
{
scanf("%s %s %s %s",person->ID,person->dorm,person->bednum,person->group);
fprintf(fp,"%-20s%-20s%-20s%-20s%-20s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
scanf("%s",person->name);
}
fclose(fp);
}
void readfile() //文件读取函数
{
if((fp=fopen("data.txt","r+"))==NULL)
{printf("\n无法打开该文件!\n");exit(0);}
fclose(fp);
}
void output() //输出函数 用于输出文件的全部信息
{
student *person;
long offset1,offset2,offset3;
char name1[10],name2[10],name3[10];
char ID1[20],ID2[20],ID3[20];
char dorm1[300],dorm2[300],dorm3[300];
char bednum1[100],bednum2[100],bednum3[100];
char group1[200],group2[200],group3[200];
person=(student *)malloc(sizeof(student));
if((fp=fopen(filename,"r"))==NULL)
{printf("\n 无法打开该文件");exit(0);}
printf("\n**************************************************************************************************\n");
printf("%50s\n","住宿信息记录如下\n");
printf("%-20s%-20s%-20s%-20s%-20s\n","姓名","学号","房号","床位号","班级");
while(!feof(fp)) //次循环用于输出文件
{
fscanf(fp,"%s%s%s%s%s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
printf("%-20s%-20s%-20s%-20s%-20s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
}
fclose(fp);
printf("**************************************************************************************************\n\n");
}
void namesearch() // 按姓名搜索函数
{
int k=0;
char namekey[100];
student *person;
person=(student *)malloc(sizeof(student));
printf("\n 请输入您要查找的姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{printf("\n 无法打开文件");exit(0);}
while(!feof(fp))
{
fscanf(fp,"%s %s %s %s %s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
if(!strcmp(namekey,person->name))
{
printf("\n\n 已经为您找到 以下是记录:\n\n");
printf("%-20s%-20s%-20s%-20s%-20s\n","姓名","学号","房号","床位号","班级");
printf("%-20s%-20s%-20s%-20s%-20s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
k=1;
}
}
if(!k)
printf("\n\n 没有关于此姓名的任何信息! \n");
fclose(fp);
}
void IDsearch() //按学号搜索函数
{
int k=0;
char xhkey[200];
student *person;
person=(student *)malloc(sizeof(student));
printf("\n 请您输入需要查找的学号:");
scanf("%s",xhkey);
if((fp=fopen(filename,"rb"))==NULL)
{printf("\n 无法打开文件 ");exit(0);}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
if(!strcmp(xhkey,person->ID))
{
printf("\n\n 已经为您找到 以下是记录:\n\n");
printf("%-20s%-20s%-20s%-20s%-20s\n","姓名","学号","房号","床位号","班级");
printf("%-20s%-20s%-20s%-20s%-20s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
k=1;
}
}
if(!k)
printf("\n\n 没有关于该学号的任何信息\n");
fclose(fp);
}
void dormsearch () //按房号搜索函数
{
int k=0;
char fhkey[300];
student *person;
person=(student *)malloc(sizeof(student));
printf("\n 请您输入想要查找的房号:");
scanf("%s",fhkey);
if((fp=fopen(filename,"rb"))==NULL)
{printf("\n 无法打开文件");exit(0);}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
if(!strcmp(fhkey,person->dorm))
{
printf("%-20s%-20s%-20s%-20s%-20s\n","姓名","学号","房号","床位号","班级");
printf("%-20s%-20s%-20s%-20s%-20s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
k=1;
}
}
if(!k)
printf("\n\n 没有关于此房号的任何信息\n");
fclose(fp);
}
void add() //插入函数 用于像已有文件插入一条新的学生信息记录
{ student *person;
person=(student *)malloc(sizeof(student));
if((fp=fopen(filename,"a"))==NULL)
{printf("\n 无法打开文件");exit(0);}
printf("\n 请您输入学生姓名 学号 房号 床位号 班级 \n");
scanf("%s %s %s %s %s",person->name,person->ID,person->dorm,person->bednum,person->group);
fprintf(fp,"%-20s%-20s%-20s%-20s%-20s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
printf("\n\n增加成功!\n");
fclose(fp);
}
void modify() //更新函数 用于修改指定房号、床号的记录
{ int k=0;
long offset;
char dormkey[100],bednumkey[100];
student *person;
person=(student *)malloc(sizeof(student));
printf("\n 请您输入想要更改住宿信息的房号及床位号:");
scanf("%s%s",dormkey,bednumkey);
if((fp=fopen(filename,"r+"))==NULL)
{printf("\n 无法打开文件"); exit(0);}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s%s%s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
if(!strcmp(dormkey,person->dorm)&&!strcmp(bednumkey,person->bednum))
{k=1;break;}
}
if(k)
{
printf("\n 记录输出如下:\n\n");
printf("%-20s%-20s%-20s%-20s%-20s\n","姓名","学号","房号","床位号","班级");
printf("%-20s%-20s%-20s%-20s%-20s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
printf("\n 请您输入新的学生姓名 学号 房号 床位号 班级:\n");
scanf("%s %s %s %s %s",person->name,person->ID,person->dorm,person->bednum,person->group);
fseek(fp,offset,SEEK_SET);
fprintf(fp,"%-20s%-20s%-20s%-20s%-20s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
printf("\n修改成功!\n");
}
else
{printf("\n\n 请确认输入的信息是否正确!\n");}
fclose(fp);
}
void deleted() //删除函数 用于删除指定学生姓名的记录
{
int k=0;
char m;
long offset;
char dormkey[100],bednumkey[100];
student *person;
person=(student *)malloc(sizeof(student));
printf("\n请您输入想要删除住宿信息的房号及床位号:");
scanf("%s%s",dormkey,bednumkey);
if((fp=fopen(filename,"r+"))==NULL)
{printf("\n 无法打开文件 ");exit(0);}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s%s%s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
if(!strcmp(dormkey,person->dorm)&&!strcmp(bednumkey,person->bednum))
{k=1;break;}
}
if(k)
{
printf("\n 记录输出如下:\n\n");
printf("%-20s%-20s%-20s%-20s%-20s\n","姓名","学号","房号","床位号","班级");
printf("%-20s%-20s%-20s%-20s%-20s\n",person->name,person->ID,person->dorm,person->bednum,person->group);
printf("\n 您真的确定要删除?y/n?");
scanf("%s",&m);
if(m=='y') //删除确认按钮
{
fseek(fp,offset,SEEK_SET); //删除记录
fprintf(fp,"%-20s%-20s%-20s%-20s%-20s\n","","","","","");
printf("\n\n 删除成功!");
}
else rewind(fp);
}
else printf("\n 请确认信息输入是否正确!\n");
fclose(fp);
}
int main() //主函数
{
int m,flag=1; // m用于控制菜单
c语言--宿舍管理设计
需积分: 9 171 浏览量
2022-03-11
21:09:54
上传
评论
收藏 146KB RAR 举报
起码我注册了一个账号
- 粉丝: 2
- 资源: 23
最新资源
- mysql查询语句汇总.zip
- typora-x64-v0.9.93,windows,64位,markdown工具,文本编辑器
- 基于C语言的neon_osd_Draw ARM Neon加速OSD点阵设计源码
- 目标检测-工地工人安全设备佩戴检测数据集-3500张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本+训练日志
- 运筹学运输问题综合实验的实验报告
- home - 副本.vue
- imageProcess.py
- typora-linux-v0.11.18-amd64,linux,64位,markdown工具,文本编辑器
- 基于Java的sky-take-out云霄外卖管理系统设计源码
- SAP-可用性检查应用测试.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0