目录
题目要求:
设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通信录数据类型定义为结构体类型。
1.主要功能:
(1) 能建立、修改、增加和删出学生通讯录,
(2) 能够按位置、编号、姓名方式进行查询和进行整体查询。
2.要求:界面友好,易于操作,采用二进制文件存储数据。
小结:
本文采用纯c语言输入 但是会导致内存浪费,比较复杂化。适合新手,有的函数运用“goto语句”会大大简化方便代码。会根据这篇博客阅读量等 来判断是否写下一篇博客——动态版通讯录和链表通讯录
废话不多说,直接上代码。
1.定义变量
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<io.h>
#define max 200
//功能函数
int menu(); //菜单函数
int add(); //添加函数
int read_a(); //读取创建文件
int save(); //保存信息到文件
int look(); //查看整体学生信息函数
int update(); //修改一个学生信息
int delete(); //删除一个学生信息
int inquire();
int inquiree();
int inquireee();
struct student
{
char name[20]; //姓名、家庭地址、邮政编码、电话号码、编号
char address[20];
char mail[20];
char number[20];
char bianhao[20];
};
struct date
{
int count;
struct student stu[max];
}da;
2.主函数
int main()
{
int a;
read_a(); //文件操作
menu();
printf("请输入功能号:\n");
while (1)
{
scanf("%d",&a);
switch (a)
{
case 1:
add();
break;
case 2:
update();
break;
case 3:
dalete();
break;
case 4:
inquire();
break;
case 5:
inquiree();
break;
case 6:
inquireee();
break;
case 7:
look();
break;
default:
printf("输入错误,请重新输入");
}
}
return 0;
}
3.菜单函数
int menu()
{
printf("\t\t\t------------------------------\n");
printf("\t\t\t*** (1)添加信息 ***\n");
printf("\t\t\t*** (2)修改信息 ***\n");
printf("\t\t\t*** (3)删除信息 ***\n");
printf("\t\t\t*** (4)查询信息(按位置)***\n");
printf("\t\t\t*** (5)查询信息(按编号)***\n");
printf("\t\t\t*** (6)查询信息(按姓名)***\n");
printf("\t\t\t*** (7)查看信息 ***\n");
printf("\t\t\t------------------------------\n");
printf("请输入功能号:");
return 0;
}
4.创建文件并打开
int read_a()
{
struct student st;
FILE* pa;
int i, k=0;
if (access("D:\\bsk_1.txt", 0) == -1)
{
pa = fopen("D:\\bsk_1.txt", "w");
fwrite(&k, sizeof(int), 1, pa);
fclose(pa);
}
//判断是否存在,不存在会自动创建一个
pa = fopen("D:\\bsk_1.txt", "r");
fread (&k, sizeof(int), 1, pa);
da.count = k;
for (i = 0; i < k; i++)
{ //写入学生信息到文件
fread(&st, sizeof(struct student ), 1, pa);
strcpy(da.stu[i].name, st.name);
strcpy(da.stu[i].address, st.address);
strcpy(da.stu[i].mail, st.mail);
strcpy(da.stu[i].number, st.number);
strcpy(da.stu[i].bianhao, st.bianhao);
}
fclose(pa);
return 0;
}
5.保存文件函数
int save()
{
FILE*pa;
int i,k;
k=da.count;
pa=fopen("D:\\bsk_1.txt","w");
fwrite(&k,sizeof(int),1,pa);
for(i=0;i<k;i++)
fwrite(&da.stu[i],sizeof(struct student),1,pa);
fclose(pa);
return 0;
}
6.添加学生信息
int add()
{
int i,b,k,j;
struct student st;
while(1)
{
j=0;
q:printf("请输入学生信息\n");
printf("请输入学生姓名:");
scanf("%s",st.name);
printf("请输入学生地址:");
scanf("%s",st.address);
printf("请输入学生邮箱:");
scanf("%s",st.mail);
printf("请输入学生电话:");
scanf("%s",st.number);
printf("请输入学生编号:");
scanf("%s",st.bianhao);
for (i = 0; i < da.count; i++)
{
if (strcmp(da.stu[i].name, st.name) == 0)
{
printf("输入重复,请重新输入\n");
j = 1;
break;
}
}
if (j == 1)
continue;
if (j == 0)
{
k = da.count;
strcpy(da.stu[k].name, st.name);
strcpy(da.stu[k].address, st.address);
strcpy(da.stu[k].mail, st.mail);
strcpy(da.stu[k].number, st.number);
strcpy(da.stu[k].bianhao, st.bianhao);
da.count++;
save();
x:printf("是否继续添加信息:1 是 2 否\n");
scanf("%d",&b);
if(b==2)
goto s;
else if (b==1)
goto q;
else
printf("输入有误,请重新输入:");
goto x;
}
}
s: menu();
return 0;
}
7.修改学生信息
int update()
{
int a,i,b,flag;
while(1)
{
flag=0;
printf("请输入要修改的学生信息的位置:\n");
scanf("%d",&a);
a=a-1;
for(i=0;i<da.count;i++)
{
if(i==a)
{
printf("请输入学生姓名:");
scanf("%s",da.stu[i].name);
printf("请输入学生地址:");
scanf("%s",da.stu[i].address);
printf("请输入学生邮箱:");
scanf("%s",da.stu[i].mail);
printf("请输入学生电话:");
scanf("%s",da.stu[i].number);
printf("请输入学生编号:");
scanf("%s",da.stu[i].bianhao);
flag=1;
save();
a:printf("修改成功,是否继续修改:1 是 2 否");
scanf("%d",&b);
if(b==1)
;
else if(b==2)
goto x;
else
printf("输入有误\n");
goto a;
}
}
if(flag==0)
printf("输入学生位置不存在,请重新输入\n");
}
x: menu();
return 0;
}
8.删除学生信息
int dalete()
{
int i,a,b;
int flag;
while(1)
{
flag=0;
printf("请输入删除学生的位置\n");
scanf("%d",&a);
a=a-1;
//减一:是为了与现实生活更接近,因为只有程序员知道第一个元素的数组下标是0
for(i=0;i<da.count;i++)
{
if(i==a)
{
for(i=a;i<da.count;i++)
{
strcpy(da.stu[i].name,da.stu[i+1].name);
strcpy(da.stu[i].address,da.stu[i+1].address);
strcpy(da.stu[i].mail,da.stu[i+1].mail);
strcpy(da.stu[i].number,da.stu[i+1].number);
strcpy(da.stu[i].bianhao,da.stu[i+1].bianhao);
da.count--;
save();
flag=1;
printf("删除成功");
a:printf("是否继续删除:1 是 2 否\n");
scanf("%d",&b);
if(b==1)
break;
else if(b==2)
goto x;
else
printf("输入有错误\n");
goto a;
break;
}
}
}
if(flag==0)
printf("输入学生位置不存在,请重新输入:\n");
}
x: menu();
return 0;
}
9.查询学生信息(按位置)
int inquire()
{ int i,a,b;
int k;
while(1)
{
k=1;
printf("请输入需要查询学生信息的位置\n");
scanf("%d",&a);
a=a-1;
for(i=0;i<da.count;i++)
{
if(i==a)
{ printf("%s\t%s\t%s\t%s\t%s\t",da.stu[i].name,da.stu[i].address,da.stu[i].mail,da.stu[i].number,da.stu[i].bianhao);
k=0;
a:printf("\n是否继续查询:1 是 2 否");
scanf("%d",&b);
if(b==2)
goto x;
else if(b==1)
;
else
printf("输入错误");
goto a;
}
}
if(k==1)
printf("输入错误\n");
printf("\n");
}
x: menu();
return 0;
}
10.查询学生信息(按编号)
int inquiree()
{
int i,b;
char a[20];
int flag;
while(1)
{
flag=0;
printf("请输入学生编号:");
scanf("%s",&a);
for(i=0;i<da.count;i++)
{
if(strcmp(da.stu[i].bianhao,a)==0)
{
printf("已找到\n");
flag=1;
printf("%s\t%s\t%s\t%s\t%s\t",da.stu[i].name,da.stu[i].address,da.stu[i].mail,da.stu[i].number,da.stu[i].bianhao);
a:printf("\n是否继续查询:1 是 2 否");
scanf("%d",&b);
if(b==2)
goto x;
else if(b==1)
break;
else
printf("输入错误\n");
goto a;
break;
}
}
if(flag==0)
printf("输入错误\n");
}
x: menu();
return 0;
}
11.查询学生信息(按姓名)
int inquireee()
{
int i,b;
char a[20];
int flag;
while(1)
{
flag=1;
printf("请输入学生姓名:");
scanf("%s",&a);
for(i=0;i<da.count;i++)
{
if(strcmp(da.stu[i].name,a)==0)
{
printf("已找到\n");
flag=0;
printf("%s\t%s\t%s\t%s\t%s\t",da.stu[i].name,da.stu[i].address,da.stu[i].mail,da.stu[i].number,da.stu[i].bianhao);
a: printf("\n是否继续查询:1 是 2 否");
scanf("%d",&b);
if(b==2)
goto x;
else if(b==1)
break;
else
printf("输入错误\n");
goto a;
}
}
if(flag==1)
printf("输入错误\n");
}
x: menu();
return 0;
}
12.整体学生信息查看
int look()
{
int i;
for(i=0;i<da.count;i++)
printf("%s\t%s\t%s\t%s\t%s\t\n",da.stu[i].name,da.stu[i].address,da.stu[i].mail,da.stu[i].number,da.stu[i].bianhao);
menu();
return 0;
}