题目:班级档案管理系统一、设计任务与目标对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。
功能要求:(1)本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、年龄、备注。
(2)本系统显示这样的菜单:请选择系统功能项:a 学生基本信息录入b 学生基本信息显示c 学生基本信息保存d 学生基本信息删除e 学生基本信息修改(要求先输入密码)f 学生基本信息查询(1)按学号查询(2)按姓名查询(3)按性别查询(4)按年龄查询g. 退出系统(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生基本信息保存到文件中。
(5)进入系统之前要先输入密码。
二、方案设计与论证主要采用结构体数组,通过scanf函数从键盘输入学生各种信息,每当修改学生信息时需要调用密码验证函数。
定义了一个文件指针,密码验证函数中,通过fopen打开已有文本文件,然后通过fgetc逐个读取该文件中的字符来实现。
退出系统时向学生信息文件中写入数据并关闭文件就实现了保存文件的功能。
四、全部源程序清单#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#define N 3struct student{char name[10];char no[10];char sex;int age;char bnote[100];};void print(bool menu)//打印基本信息{if (!menu){printf("学生基本信息录入 ,press 1\n"); }else{printf("学生基本信息显示 ,press 2\n");printf("学生基本信息保存 ,press 3\n");printf("学生基本信息删除 ,press 4\n");printf("学生基本信息修改 ,press 5\n");printf("学生基本信息查询 ,press 6\n"); }printf("退出学生信息系统 ,press 7\n");bool Check(char pas[6])//密码验证{FILE *fp;//定义一个文件指针fp,建立一个字符文件char ch;char a[7]={" "};int i = 0;if ((fp=fopen("c:\\密码.txt","r"))==NULL)//打开密码.txt{printf("文件打开失败!\n");exit(0);}ch=fgetc(fp);while (ch!=EOF&&i<6){a[i] = ch;ch=fgetc(fp);i++;}a[6] = '\0';if (!strcmp(pas,a)){return true;}else{printf("密码错误\n");return false;}fclose(fp);}void GetInformation(struct student *arr,int n)//学生基本信息录入{for (int i = 0;i<n;i++){printf("输入学生的基本信息:name no sex age bnote\n");scanf("%s %s %c %d %s",arr[i].name,arr[i].no,&arr[i].sex,&arr[i].age,arr[i] .bnote);}}void Display(struct student* arr,int n)//学生基本信息显示{printf("学生信息: name nO sex age note\n");for (int i = 0;i<n;i++)printf("%5s%5s%5c%5d%5s\n",arr[i].name,arr[i].no,arr[i].sex,arr[i].age,arr[i].b note);}}void Save(struct student* arr,int n)//学生基本信息保存,保存在c:\\student.txt {FILE * fp;fp= fopen("c:\\student.txt","w+");if (fp == NULL){printf("文件不存在!\n");exit(0);}fwrite(arr,sizeof(struct student)*n,n,fp);fclose(fp);}void Modfiy(struct student* arr,int n)//学生基本信息修改{char number[10];bool flag=false;char pass[6];printf("请输入密码:\n");scanf("%s",pass);if (Check(pass)){printf("修改学生信息:\n");printf("请输入学号:\n");scanf("%s",number);for (int i =0;i<n;i++){if (!strcmp(number,arr[i].no)){printf("学生信息:name no sex age note\n");printf("%10s%10s%10c%10d%10s\n",arr[i].name,arr[i].no,arr[i].sex,arr[i].age,arr[i].bnote);printf("请输入学生信息:\n");scanf("%s %s %c %d %s",arr[i].name,arr[i].no,&arr[i].sex,&arr[i].age,arr[i].bno te);Save(arr,n);flag = true;}if (flag == false){printf("该学生不存在!\n");}}}void Delete(struct student* arr,int n)//学生基本信息删除{char number[10];bool flag=false;printf("删除学生信息:\n");printf("请输入学号:\n");scanf("%s",number);for (int i =0;i<n;i++){if (!strcmp(number,arr[i].no)){strcpy(arr[i].name," ");strcpy(arr[i].no," ");strcpy(arr[i].bnote," ");arr[i].sex = ' ';arr[i].age = 0;Save(arr,n);flag = true;}}if (flag == true){printf("该学生不存在!:\n");}}void Search(struct student* arr,int n)//学生基本信息查询{int temp,i;bool flag=false;printf("---------------通过学号查询,press 1-------------\n"); printf("---------------通过姓名查询,press 2-----------\n"); printf("---------------通过性别查询,press 3------------\n"); printf("---------------通过年龄查询,press 4------------\n");printf("---------------退出,press 5 ------------\n"); scanf("%d",&temp);switch (temp){case 1://按照学号查询{char num[10];printf("请输入学号:\n");scanf("%s",num);for ( i =0;i<n;i++){if (!strcmp(num,arr[i].no)){printf("%10s%10s%10c%10d%10s\n",arr[i].name,arr[i].no, arr[i].sex,arr[i].age,arr[i].bnote);flag = true;}}if (!flag){printf("该学生不存在.\n");}}break;case 2://按照姓名查询{char num[10];printf("请输入姓名:\n");scanf("%s",num);for ( i =0;i<n;i++){if (!strcmp(num,arr[i].name)){printf("%10s%10s%10c%10d%10s",arr[i].name,arr[i].no,arr[i].sex,arr[i].age,arr[i].bnote);flag = true;}}if (!flag){printf("该学生不存在.\n");}}break;case 3://按照性别查询{char ch;printf("请输入性别:\n");//scanf("%c",&ch);ch = getch();for ( i =0;i<n;i++){if (ch == arr[i].sex){printf("%10s%10s%10c%10d%10s\n",arr[i].name,arr[i].no, arr[i].sex,arr[i].age,arr[i].bnote);flag = true;}}if (!flag){printf("该学生不存在.\n");}}break;case 4://按照年龄查询{char num_age;printf("请输入年龄:\n");scanf("%d",&num_age);for ( i =0;i<n;i++){if (num_age == arr[i].age){printf("%10s%10s%10c%10d%10s\n",arr[i].name,arr[i].no, arr[i].sex,arr[i].age,arr[i].bnote);flag = true;}}if (!flag){printf("该学生不存在.\n");}}break;default:break;}}void main(){struct student arr[N];char ps[6];bool flag =false;printf("请输入密码:\n");scanf("%s",ps);flag = Check(ps);if (flag){int select;print(false);scanf("%d",&select);while (0<select && select <7 ) {switch (select){case 1:GetInformation(arr,N);print(true);break;case 2:Display(arr,N);print(true);break;case 3:Save(arr,N);print(true);break;case 4:Delete(arr,N);print(true);break;case 5:Modfiy(arr,N);print(true);break;case 6:Search(arr,N);print(true);break;default:break;}printf("请选择:\n");scanf("%d",&select);}}}五、程序运行的测试与分析六、结论与心得无论什么只有自己真的懂了,才能说出来个所以然。