一、【课程设计】学生兴趣特长信息管理系统
问题描述:
学生兴趣特长信息管理软件设计。对学生信息进行管理,学生信息包括:学号、姓名、性别、年级、专业等;对兴趣信息进行管理,兴趣信息包括:兴趣类别信息和兴趣信息;还需要有查询信息的功能。
基本要求:
1. 必须使用文件存储数据,可更新数据写入文件中
2. 每一项兴趣属于一种类别,每个学生可以有多项兴趣特长
3. 兴趣类别、兴趣、学生信息是可以添加、删除、修改的
4. 给学生添加兴趣时,学生可挑选也可全选
5. 可查询某兴趣的所有爱好者信息,可查询某兴趣的所有爱好者信息
二、【数据格式分析】
三、【数据结构】
四、【算法分析】
1.对文件进行读和更新的操作
1.1从文件中读取兴趣类别和兴趣类别序号的信息:read_xqlb();
void read_xqlb()//读取兴趣类别和兴趣类别序号的信息
{
FILE *F = fopen("d:\\xqlb.txt","r");
fscanf(F,"%d\n",&xqlb_n);
for (int i=1;i<=xqlb_n;i++)
{
XQL[i].exi=0;
fscanf(F,"%s ",XQL[i].name);
fscanf(F,"%d ",&XQL[i].num);
for (int j=1;j<=XQL[i].num;j++)
fscanf(F,"%d ",&XQL[i].xq[j]);
fscanf(F,"\n");
}
fclose(F);
}
1.2从文件中读取兴趣信息:read_xq();
void read_xq()//读取兴趣信息
{
FILE *F = fopen("d:\\xq.txt","r");
fscanf(F,"%d ",&name_n);
for (int i=1;i<=name_n;i++)
fscanf(F,"%s ",xq_name[i]);
fclose(F);
}
1.3从文件中读取学生信息:read_stu();
void read_stu()//读取学生信息
{
FILE *F = fopen("d:\\stu.txt","r");
fscanf(F,"%d\n",&stu_n);
for (int i=1;i<=stu_n;i++)
{
fscanf(F,"%s ",STU[i].name);
fscanf(F,"%d ",&STU[i].id);
fscanf(F,"%s ",STU[i].sex);
fscanf(F,"%s ",STU[i].grade);
fscanf(F,"%s ",STU[i].major);
fscanf(F,"%s ",STU[i].mobile);
fscanf(F,"%s ",STU[i].jg);
fscanf(F,"%d ",&STU[i].num);
for (int j=1;j<=STU[i].num;j++)
fscanf(F,"%d ",&STU[i].xq[j]);
fscanf(F,"\n");
}
fclose(F);
}
1.4更新兴趣类别和兴趣序号的信息
void update_xq()//更新兴趣类别和兴趣序号的信息
{
FILE *F = fopen("d:\\xqlb.txt","w");
fprintf(F,"%d\n",xqlb_n);
for (int i=1;i<=xqlb_n;i++)
if (XQL[i].exi==0)
{
fprintf(F,"%s ",XQL[i].name);
fprintf(F,"%d ",XQL[i].num);
for (int j=1;j<=XQL[i].num;j++)
fprintf(F,"%d ",XQL[i].xq[j]);
fprintf(F,"\n");
}
fclose(F);
}
1.5更新学生信息
void update_stu()//更新学生信息
{
FILE *F = fopen("d:\\stu.txt","w");
fprintf(F,"%d\n",stu_n);
for (int i=1;i<=stu_n;i++)
{
fprintf(F,"%s ",STU[i].name);
fprintf(F,"%d ",STU[i].id);
fprintf(F,"%s ",STU[i].sex);
fprintf(F,"%s ",STU[i].grade);
fprintf(F,"%s ",STU[i].major);
fprintf(F,"%s ",STU[i].mobile);
fprintf(F,"%s ",STU[i].jg);
fprintf(F,"%d ",STU[i].num);
for (int j=1;j<=STU[i].num;j++)
fprintf(F,"%d ",STU[i].xq[j]);
fprintf(F,"\n");
}
fclose(F);
}
2.兴趣序号与名称的映射
int ys(char *str)//兴趣序号与名称的映射
{
FILE *F = fopen("d:\\xq.txt","r");
fscanf(F,"%d ",&name_n);
for (int i=1;i<=name_n;i++)
fscanf(F,"%s ",xq_name[i]);
fclose(F);
for (int i=1;i<=name_n;i++)
if (strcmp(xq_name[i],str)==0) return i; //当前兴趣在映射中直接返回序号
name_n++;
strcpy(xq_name[name_n],str); //不在映射中将其加入映射
F = fopen("d:\\xq.txt","w"); //更新映射信息
fprintf(F,"%d ",name_n);
for (int i=1;i<=name_n;i++)
fprintf(F,"%s ",xq_name[i]);
fclose(F);
return name_n; //返回新的序号
}
总体设计
3.兴趣管理系统
3.1 添加兴趣类别
3.2删除兴趣类别
3.3修改兴趣类别
void up_xqlb()//修改兴趣类别
{
while(true)
{
system("cls");
for (int i=1;i<=xqlb_n;i++)
printf("%d.%s\n",i,XQL[i].name); //输出所有兴趣类别
printf("请输入需要修改的兴趣类别的序号:");
int x;
scanf("%d",&x);
printf("请输入该兴趣类别的新名字:");
char str[20];
scanf("%s",str);
printf("“%s”兴趣类别已修改为“%s\n”",XQL[x].name,str);
strcpy(XQL[x].name,str);
update_xq();
printf("还要继续修改兴趣类别吗?\n输入“1”继续修改,输入“0”停止修改:");
int i;
scanf("%d",&i);
if(i==1) continue;
if(i==0) break;
} //while循环结束
printf("\n\n请输入任意字符并按回车键继续:");
char a;
scanf("%s",&a);
return;
}
3.4添加兴趣
3.5删除兴趣
void del_xq()//删除兴趣
{
while(true) //外循环 用于判断是否继续删除其它兴趣类别里的兴趣
{
system("cls");
for (int i=1;i<=xqlb_n;i++)
printf("%d.%s\n",i,XQL[i].name); //输出所有兴趣类别
printf("请选择兴趣类别的序号:");
int x;
scanf("%d",&x);
while(true)//内循环 用于判断是否继续删除该兴趣类别里的兴趣
{
for (int i=1;i<=XQL[x].num;i++)
pri