问题描述
为自己所在的班级建立一个小型的管理系统,该系统能够方便实现查询每个同学的基本情况,能够进行插入与删除操作(笔者使用文件实现上述操作)。其中:每位同学的信息包括:学号、姓名、年龄、电话以及籍贯。
一堆废话
很久没有更新博客了,小白刚刚历经考试周的打击,百废待兴,赶紧跑来CSDN和小伙伴们取暖安慰受伤的心灵。近期会陆续写四篇数据结构课设的博客,然后再写两篇编写小游戏的博客,一个是基于Python的飞机大战,另一个是基于C++并在funcode上完成的海底世界游戏。
数据描述
(1)定义一个顺序表,顺序表中的元素包括结构体类型(Stu)的数组和顺序表的长度。
(2)结构体Stu其中的元素包括学号、姓名、年龄、电话以及籍贯。
typedef struct{
int number; //学号
char name[100];//姓名
short age;//年龄
char phnumber[100];//电话
char adr[100];//籍贯
}Stu;
typedef struct {
Stu s[20];
int length;
}SqList;
程序代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct{
int number;
char name[100];
short age;
char phnumber[100];
char adr[100];
}Stu;
typedef struct {
Stu s[20];
int length;
}SqList;
//输入学生信息
void CreatStudent(SqList &L,int n)
{
L.length=0;
for(int i=0;i<n;i++)
{
printf("输入第%d个学生信息\n",i+1);
printf ("学号:");
scanf("%d",&L.s[i].number);
printf ("姓名:");
scanf("%s",&L.s[i].name);
printf ("年龄:");
scanf("%d",&L.s[i].age);
printf ("电话:");
scanf("%s",&L.s[i].phnumber);
printf ("地址:");
scanf("%s",&L.s[i].adr);
L.length++;
}
FILE *fp;
fp=fopen("student.txt","w+");//w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
for(int i=0;i<L.length;i++)
{
fprintf(fp,"%d %s %d %s %s\n",L.s[i].number,L.s[i].name,L.s[i].age,L.s[i].phnumber,L.s[i].adr);
}
printf("添加成功!");
fclose(fp);
}
//插入学生信息
void InsertStudent(SqList &L)
{
int i=0;
int flag=0;
L.length=0;
FILE *fp1;
fp1=fopen("student.txt","r+");//r+ 以可读写方式打开文件,该文件必须存在
while(!feof(fp1))//feof为判断是否读到文件尾
{
fscanf(fp1,"%d %s %d %s %s",&L.s[i].number,L.s[i].name,&L.s[i].age,L.s[i].phnumber,L.s[i].adr);
L.length++;
i++;
}
L.length--;
fclose(fp1);
int j;
// printf("输入要插入学生信息\n");
printf ("输入要插入学生学号:");
scanf("%d",&L.s[L.length].number);
for(i=0;i<L.length;i++)
{
if(L.s[i].number==L.s[L.length].number)
{
flag=1;
}
}
if(flag==1)
printf("有该同学,插入失败!");
else
{
printf ("姓名:");
scanf("%s",&L.s[L.length].name);
printf ("年龄:");
scanf("%d",&L.s[L.length].age);
printf ("电话:");
scanf("%s",&L.s[L.length].phnumber);
printf ("地址:");
scanf("%s",&L.s[L.length].adr);
L.length++;
FILE *fp;
fp=fopen("student.txt","w+");
for(int i=0;i<L.length;i++)
{
fprintf(fp,"%d %s %d %s %s\n",L.s[i].number,L.s[i].name,L.s[i].age,L.s[i].phnumber,L.s[i].adr);
}
printf("插入成功!");
fclose(fp);
}
}
//删除学生信息
void DeleteStudent(SqList &L)
{
int i=0,k,j;
int num,flag=0;
L.length=0;
printf("输入要删除学生的学号:");
scanf("%d",&num);
FILE *fp1;
fp1=fopen("student.txt","r+");
while(!feof(fp1))
{
fscanf(fp1,"%d %s %d %s %s",&L.s[i].number,L.s[i].name,&L.s[i].age,L.s[i].phnumber,L.s[i].adr);
L.length++;
i++;
}
L.length--;
fclose(fp1);
for(i=0;i<L.length;i++)
{
if(L.s[i].number==num)
{
k=i;
flag=1;
}
}
if(flag==0)
printf("没有找到该同学,插入失败!");
else
{
for(j=k;j<L.length;j++)
L.s[j]=L.s[j+1];
L.length--;
FILE *fp;
fp=fopen("student.txt","w+");
for(int i=0;i<L.length;i++)
{
fprintf(fp,"%d %s %d %s %s\n",L.s[i].number,L.s[i].name,L.s[i].age,L.s[i].phnumber,L.s[i].adr);
}
printf("删除成功!");
fclose(fp);
}
}
//查询学生信息
void SearchStudent(SqList &L)
{
int i=0,k,j;
int flag=0;
L.length=0;
char na[20];
printf("输入要查询学生的姓名:");
scanf("%s",na);
FILE *fp1;
fp1=fopen("student.txt","r+");
while(!feof(fp1))
{
fscanf(fp1,"%d %s %d %s %s",&L.s[i].number,L.s[i].name,&L.s[i].age,L.s[i].phnumber,L.s[i].adr);
L.length++;
i++;
}
L.length--;
fclose(fp1);
for(i=0;i<L.length;i++)
{
if(strcmp(L.s[i].name,na)==0)
{
k=i;
flag=1;
}
}
if(flag==0)
printf("没有找到该同学,查询失败!");
else
printf("学号:%d 姓名:%s 年龄:%d 电话:%s 地址:%s\n",L.s[k].number,L.s[k].name,L.s[k].age,L.s[k].phnumber,L.s[k].adr);
}
//显示学生信息
void ShowAll(SqList &L)
{
int i=0;
L.length=0;
FILE *fp1;
fp1=fopen("student.txt","r+");
while(!feof(fp1))
{
fscanf(fp1,"%d %s %d %s %s",&L.s[i].number,L.s[i].name,&L.s[i].age,L.s[i].phnumber,L.s[i].adr);
L.length++;
i++;
}
L.length--;
fclose(fp1);
printf("\n");
for(i=0;i<L.length;i++)
{
printf("学号:%d 姓名:%s 年龄:%d 电话:%s 地址:%s\n",L.s[i].number,L.s[i].name,L.s[i].age,L.s[i].phnumber,L.s[i].adr);
}
}
int main()
{
SqList L;
int n;
int option;
printf("\n**********欢迎使用班级管理系统**********");
while(1)
{
printf("\n*************1.创建学生信息*************");
printf("\n*************2.插入学生信息*************");
printf("\n*************3.删除学生信息*************");
printf("\n*************4.查询学生信息*************");
printf("\n*************5.查看学生信息*************");
printf("\n***********6.退出班级管理系统***********\n");
printf("***********请选择需要的服务:************\n");
scanf("%d",&option);
system("cls");
switch(option)
{
case 1:
printf("请输入学生个数:");
scanf("%d",&n);
CreatStudent(L,n);
break;
case 2:
InsertStudent(L);
break;
case 3:
DeleteStudent(L);
break;
case 4:
SearchStudent(L);
break;
case 5:
ShowAll(L);
break;
case 6:
exit(0);
break;
}
}
return 0;
}
测试数据
(1)初始化学生信息到studen.txt
(2)插入新的学生信息
若原文件中已经存在学号为4 的同学,插入失败!
(3)删除学生信息
(4)查询学生信息
(5)查看文件中已经存有的所有学生的信息
(6)student.txt文件中存放的信息