📄 program of student file.c
字号:
#include "stdio.h"
#include "string.h"
#include "malloc.h"
typedef struct /* 声明结构体类型 */
{
char name[24];
char num[16];
char birth[16];
char schtim[16]; /* 数组成员 */
char addr[28];
char tel[16];
char age[8];
char sex[8];
}student;
void search(void); /* 实现详细查询信息的功能 */ /* 以下8行是声明各个被调用的函数,且在函数的外部 */
void consearch(void); /* 实现简明查询信息的功能 */
void input(void); /* 实现输入信息的功能 */
void del(void); /* 实现删除信息的功能 */
void rew(void); /* 实现修改重写信息的功能 */
void next(void); /* 实现浏览信息的功能 */
void getinf(void); /* 实现读入信息的功能 */
void output(void); /* 实现输出信息的功能 */
FILE *fp; /* fopen函数,用来打开文件 */
student *p;
int length, len;
int stunum, stupos;
int main(void) /* 主函数 */
{
char ch; int k=1;
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf(" ☆ *学生档案信息管理系统* ☆\n");
printf(" ☆ *欢迎您* ☆\n");
printf(" ☆ ☆\n");
printf(" ☆Prodtcer: 金开春 刘莉 ☆\n");
printf(" ☆ ☆\n");
printf(" ☆Assistant Teacher: 刘素华 ☆\n");
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("The student's information:\n");
p=(student *)malloc(sizeof(student));
if(!p)
{
printf("Overflow\n"); return 0;}
length=sizeof(student); len=sizeof(int); /* 输出文件中一个学生的信息 */
stunum=0; stupos=0;
fp=fopen("student","rb+");
if(!fp)
{
printf("File not exit! Please input the informatoin first!\n"); /* 若文件中无内容,则无输出结果 */
fp=fopen("student","wb+");
if(!fp) {printf("Cannot open file!\n"); return 0;
}
fwrite(&stunum,len,1,fp);
}
else
{
fread(&stunum,len,1,fp); next();
}
while(k)
{
printf("--------------------------------------------------------------\n");
printf("Please select the operation!\n");
printf("(s)earch(详细查询)/(c)onsearch(简明查询)/(i)nput/(d)elet/(r)ewrite/(n)ext/(q)uit:\n ");
scanf("%c",&ch); getchar(); /* 输入要执行的命令 */
switch(ch) /* 多分支选择语句 */
{
case 'S' :
case 's' : search(); break; /* 执行搜索学生信息命令 */
case 'C' :
case 'c' : consearch(); break; /* 执行简明搜索学生信息命令 */
case 'I' :
case 'i' : input(); break; /* 执行添加学生信息命令 */
case 'D' :
case 'd' : del(); break; /*执行删除学生信息命令 */
case 'R' :
case 'r' : rew(); break; /* 执行修改重写学生信息命令 */
case 'N' :
case 'n' : next(); break; /* 执行浏览下一个学生信息命令 */
case 'Q' :
case 'q' : k=0; break; /* 退出 */
default : printf("Unknown or bad command!\n"); /* 错误命令 */
}
}
rewind(fp);
fwrite(&stunum,len,1,fp);
fclose(fp);
free(p);
return 1;
}
void getinf(void) /* 定义getinf函数,实现读入学生信息 */
{
printf("full name: ");
gets(p->name); /* 读入学生姓名 */
printf("school number: ");
gets(p->num); /* 读入学生学号 */
printf("sex ---female/male: ");
gets(p->sex); /* 读入学生性别 */
printf("age: ");
gets(p->age); /* 读入学生年龄 */
printf("birthday: ");
gets(p->birth); /* 读入学生出生年月 */
printf("time of attending the school: ");
gets(p->schtim); /* 读入学生入学时间 */
printf("home address: ");
gets(p->addr); /* 读入学生住址 */
printf("telephone number ---if no, input 'no': ");
gets(p->tel); /* 读入学生电话 */
}
void output(void) /* 定义output函数,实现输出学生信息,各语句的功能不再赘述 */
{
printf("--------------------------------------------------------------\n");
printf("name: ");
puts(p->name);
printf("school number: ");
puts(p->num);
printf("sex: ");
puts(p->sex);
printf("age: ");
puts(p->age);
printf("birthday: ");
puts(p->birth);
printf("time of attending the school: ");
puts(p->schtim);
printf("address: ");
puts(p->addr);
printf("telephone: ");
puts(p->tel);
}
void next(void) /* 定义next函数,实现翻页浏览功能 */
{
if(stupos<stunum)
{
fread(p,length,1,fp); output(); stupos++; /* 输出下一个学生信息 */
}
else printf("Not found information!\n"); /* 若“下一个学生不存在”,则无输出结果 */
}
void input(void) /* 定义input函数,实现输入学生信息 */
{
long k=(long)(stunum*length+len);
getinf();
fseek(fp,k,0);
fwrite(p,length,1,fp);
stunum++; stupos=stunum;
}
void rew(void) /* 定义rew函数,实现修改重写学生信息 */
{
long k=(long)((stupos-1)*length+len);
printf("Please input the new information:\n");
getinf();
fseek(fp,k,0);
fwrite(p,length,1,fp);
printf("Rewrite OK!\n");
}
void del(void) /* 定义del函数,实现删除学生信息 */
{
char ch; long k;
printf("Warning! This student's information will be deleted!\n");
printf("Are you sure? ---y/n: ");
scanf("%c",&ch); getchar(); /* 输入要执行的命令 */
if(ch=='Y'||ch=='y') /* 以下是执行删除学生信息的命令 */
{
k=(long)((stunum-1)*length+len);
fseek(fp,k,0);
fread(p,length,1,fp);
k=(long)((stupos-1)*length+len);
fseek(fp,k,0);
fwrite(p,length,1,fp);
fseek(fp,k,0);
stunum--; stupos--;
printf("This student's information has been deleted!\n");
}
}
void search(void) /* 定义search函数,实现详细查询功能 */
{
int m,n=0; long k; char ch; char mode[24];
printf("--------------------------------------------------------------\n");
printf("Please input the search way!\n");
printf("(n)ame/num(b)er/(a)ge/sch(t)ime: ");
scanf("%c",&ch); getchar(); /* 输入要执行的命令 */
printf("Please input the information of the student:\n");
gets(mode);
k=(long)len;
fseek(fp,k,0);
for(stupos=0;stupos<stunum;stupos++)
{
fread(p,length,1,fp);
switch(ch) /* 多分支选择语句,根据选择结果的不同,执行不同的语句 */
{
case 'N' :
case 'n' : if(!strcmp(p->name,mode)) {output(); n++; m=stupos;} break; /* 按姓名查找 */
case 'B' :
case 'b' : if(!strcmp(p->num,mode)) {output(); n++; m=stupos;} break; /* 按学号查找 */
case 'A' :
case 'a' : if(!strcmp(p->age,mode)) {output(); n++; m=stupos;} break; /* 按年龄查找 */
case 'T' :
case 't' : if(!strcmp(p->schtim,mode)) {output(); n++; m=stupos;} break; /* 按入学时间查找 */
default : printf("Unknown or bad order!\n");
}
}
if(!n) printf("Not found!\n"); /* 找不到符合要求的信息 */
else
{
printf("Have found %d student!\n",n); /* 找到符合要求的信息 */
stupos=m+1;
k=(long)(stupos*length+len);
fseek(fp,k,0);
}
}
void consearch(void) /* 定义search函数,实现简明查询功能 */
{
int m,n=0; long k; char ch; char mode[24];
printf("--------------------------------------------------------------\n");
printf("Please input the consearch way!\n");
printf("(n)ame/num(b)er/(a)ge/sch(t)ime: ");
scanf("%c",&ch); getchar(); /* 输入要执行的命令 */
printf("Please input the information of the student\n");
gets(mode);
k=(long)len;
fseek(fp,k,0);
printf("--------------------------------------------------------------\n");
for(stupos=0;stupos<stunum;stupos++)
{
fread(p,length,1,fp);
switch(ch) /* 多分支选择语句,根据选择结果的不同,执行不同的语句 */
{
case 'N' : /* 按姓名查找 */
case 'n' : if(!strcmp(p->name,mode))
{
printf("name: ");puts(p->name);
printf("age: ");puts(p->age);
printf("--------------------------------------------------------------\n");
n++;
m=stupos;} break;
case 'B' : /* 按学号查找 */
case 'b' : if(!strcmp(p->num,mode))
{
printf("name: ");puts(p->name);
printf("age: ");puts(p->age);
printf("--------------------------------------------------------------\n");
n++;
m=stupos;} break;
case 'A' : /* 按年龄查找 */
case 'a' : if(!strcmp(p->age,mode))
{
printf("name: ");puts(p->name);
printf("age: ");puts(p->age);
printf("--------------------------------------------------------------\n");
n++;
m=stupos;} break;
case 'T' : /* 按入学时间查找 */
case 't' : if(!strcmp(p->schtim,mode))
{
printf("name: ");puts(p->name);
printf("age: ");puts(p->age);
printf("--------------------------------------------------------------\n");
n++;
m=stupos;} break;
default : printf("Unknown or bad order!\n");
}
}
if(!n) printf("Not found!\n"); /* 找不到符合要求的信息 */
else
{
printf("Have found %d student(s)!\n",n); /* 找到符合要求的信息 */
stupos=m+1;
k=(long)(stupos*length+len);
fseek(fp,k,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -