当前位置:文档之家› c语言课程设计 班级档案管理

c语言课程设计 班级档案管理

2011-2012学年第二学期《高级语言程序设计》课程设计报告题目:班级档案管理专业:网络工程班级:2班姓名:指导教师:成绩:计算机与信息工程系2013年6月28日设计题目1 设计内容及要求1、1构建各种算法的基本数据模型,并进行分析;1、2画出算法的程序流程图;1、3写出相应模块的源程序文件;1、4设计一主程序界面进行封装。

2 概要设计该程序的主要功能是实现学生档案的管理,包括录入学生信息、显示学生信息、查询学生信息、删除学生信息、添加学生信息、修改学生信息,以及查询的方式(按学号查询、按姓名查询、按性别查询、按年龄查询)。

并统计学生的所有信息。

3 设计过程或程序代码本程序由一个Void main(),一个Void input(),一个Void Save(),一个Void display(),一个Void Delete() ,一个Void add和一个Void Search()共七个主要函数来实现该程序的编程的。

其中在主函数Void main()中调用其他六个函数,通过Switch语句来实现调用进入各个函数,进入主菜单通过录入函数录入学生信息,并自动保存在c\\student.txt中。

学生信息输入应用了结构数组,学生信息主要包括姓名,学号,性别,年龄以及备注。

其中年龄为整型,其他为字符型。

调用函数时,学生信息运用了指针数组,如void Modfiy(struct student* arr,int n)在Void Delete()调用函数中,当bool flag=ture是该学生不存在,即已被删除。

在Void search()调用函数中,当bool flag=ture是该学生存在,即已被查询到。

当flag=false时则说明没有该学生信息。

在查询系统中,有四种查询方式,分别是按姓名查询,按学号查询,按性别查询和按年龄查询。

四种查询方式用Switch语句连接起来,进入每种查询方式要输入所需信息才能进入。

该程序最大的特点是Switch连接各调用函数和各查询方式以及结构数组的运用,将各函数有序的连接起来。

各个调用函数功能的实现如下:1)信息的录入主要运用循环语句将各个学生信息依次输入2)信息的显示也是用循环语句将各个学生信息显示出来。

3)信息的保存是将信息重写到保存到的文件位置,其中信息保存在c:\\student.text4)信息的删除是运用字符串复印函数,将空格复印到信息字符上达到删除效果。

5)信息的修改是输入学号用循环语句将需修改的信息显示出来,然后再输入新的信息6)信息的查询是通过Switch语句将查询方式连接起来,并在各个查询方式中用循环语句将要查询的信息显示出来4 设计结果与分析void search_age(){int age;int i, t;int m=load();printf("请输入要查找的年龄:\n");scanf("%d",&age);for(i=0;i<m;i++)if(age==st[i].age){printf("\n已找到此人,其记录为:\n");printf("\n学号\t姓名\t性别\t年龄\t备注 \n");printf("\n%d\t%s\t%c\t%d\t%s\t%s\t%s\t%ld\n",st[i].num,st[i].name ,st[i].sex,st[i].age,st[i].xueli,st[i].beizhu,st[i].addr,st[i].tel);b reak;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按,继续查询年龄请按\n");scanf("%d",&t);switch(t){case 1:search();break;case 2:break;default :break;}}这段程序的功能是按年龄查询来查询学生的相关信息,如果输入正确就能得到该学生的学号姓名性别备注等信息,如果输入有误,将得不到有效信息,并返回查询函数重新选择。

5 参考文献C语言程序设计(第三版)谭浩强著《C语言程序设计》(第2版)人民邮电出版社《C程序设计》(第三版)北京邮电大学出版社《C语言程序设计案例分析》清华大学出版社源程序#include<stdafx.h>#include<stdio.h>#include<windows.h>#include<time.h>#include<string.h>#define N 100struct student{int num;char name[10];char sex;int age;char xueli[30];char beizhu[50];char addr[30];long int tel;}st[100]; /*定义一个结构体*/void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_name();void search_sex();void search_age();void modify(); /*定义各函数*/void menu() /*菜单函数*/{printf(" ☆☆☆网络工程☆☆☆\n");printf("\n");printf(" ∮***班 ****∮\n");printf("\n");printf(" ******************学生档案管理****************\n");printf(" 1.录入学生信息");printf(" 2.显示学生信息\n");printf(" 3.查询学生信息");printf(" 4.删除学生信息\n");printf(" 5.添加学生信息");printf(" 6.修改学生信息\n");printf(" 7.退出\n");printf(" ********************谢谢使用******************\n");printf("\n");printf("\n");}void main(){menu(); /*调用菜单函数*/int n,flag;char a;do{printf("请选择你需要操作的步骤(1--7):\n");scanf("%d",&n);if(n>=1&&n<=7){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(n){case 1:printf(" ◆◆◆输入学生信息◆◆◆\n");printf("\n");input();break;case 2:printf(" ◆◆◆显示学生信息◆◆◆\n");printf("\n");display();break;case 3:printf(" ◆◆◆按学号查询学生信息◆◆◆\n");printf("\n");search();break;case 4:printf(" ◆◆◆删除学生信息◆◆◆\n");printf("\n");del();break;case 5:printf(" ◆◆◆添加学生信息◆◆◆\n");printf("\n");add();break;case 6:printf(" ◆◆◆修改学生信息◆◆◆\n");printf("\n");modify();break;case 7:exit(0);break;default :break;}getchar();printf("\n");printf("是否继续进行(y or n):\n");scanf("%c",&a);if(a=='y'){flag=1;system("cls"); /*清屏*/menu(); /*调用菜单函数*/printf("请再次选择你需要操作的步骤(1--7):\n");scanf("%d",&n);printf("\n");}elseexit(0);}}void input() /*录入函数*/{int i,m;printf("请输入需要创建信息的学生人数(1--100):\n");scanf("%d",&m);for (i=0;i<m;i++){printf("请输入学号:");srand((int)time(0));st[i].num=rand()%10000+20000000;if(st[i].num!=st[i-1].num)printf("%8d ",st[i].num);printf("\n");printf("请输入姓名: ");scanf("%s",st[i].name);getchar();printf("请输入性别(f--女 m--男): ");scanf("%c",&st[i].sex);printf("请输入年龄: ");scanf("%d",&st[i].age);printf("请输入备注: ");scanf("%s",&st[i].beizhu);printf("\n");}printf("\n创建完毕!\n");save(m);}void save(int m) /*保存文件函数*/{int i;FILE*fp;if ((fp=fopen("c:\\student.txt","wb"))==NULL){printf ("cannot open file\n");exit(0);}for (i=0;i<m;i++) /*将内存中学生的信息输出到磁盘文件中去*/ if (fwrite(&st[i],sizeof(struct student),1,fp)!=1) printf("file write error\n");fclose(fp);}int load() /*导入函数*/{FILE*fp;int i=0;if((fp=fopen("c:\\student.txt","rb"))==NULL){printf ("cannot open file\n");exit(0);}else{do{fread(&st[i],sizeof(struct student),1,fp);i++;}while(feof(fp)==0);}fclose(fp);return(i-1);}void display() /*显示函数*/{int i;int m=load();printf("\n 学号\t姓名\t性别\t年龄\t备注 \n");for(i=0;i<m;i++) /*m为输入部分的学生人数*/printf("\n %d\t%s\t%c\t%d\t%s\t%s\t%s\t%ld\n",st[i].num,st[i].name,st[i].sex,st[i].age,st[i].xueli,st[i].beizhu,st[i].addr,st[i].tel);}void del() /*删除函数*/{int m=load();int i,j,n,t,flag;char name[20];printf("\n 原来的学生信息:\n");display(); /* 调用显示函数*/printf("\n");printf("请输入要删除的学生的姓名:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(st[i].name,name)==0){printf("\n已找到此人,原始记录为:\n");printf("\n学号\t姓名\t性别\t年龄\t备注 \n");printf("\n%d\t%s\t%c\t%d\t%s\t%s\t%s\t%ld\n",st[i].num,st[i].name,st[i].sex,st[i].age,st[i].xueli,st[i].beizhu,st[i].addr,st[i].tel);printf("\n确实要删除此人信息请按,不删除请按\n");scanf("%d",&n);if(n==1) /*如果删除,则其他的信息都往上移一行*/{for(j=i;j<m-1;j++){strcpy(st[j].name,st[j+1].name);st[j].num=st[j+1].num;st[j].sex=st[j+1].sex;st[j].age=st[j+1].age;strcpy(st[j].xueli,st[j+1].xueli);strcpy(st[j].beizhu,st[j+1].beizhu);strcpy(st[j].addr,st[j+1].addr);st[j].tel=st[j+1].tel;}flag=0;}}}if(!flag)m=m-1;elseprintf("\n对不起,查无此人!\n");printf("\n 浏览删除后的所有学生信息:\n");save(m); /*调用保存函数*/display(); /*调用显示函数*/printf("\n继续删除请按,不再删除请按\n");scanf("%d",&t);switch(t){case 1:del();break;case 0:break;default :break;}}void add()/*添加函数*/{FILE*fp;int n;int count=0;int i;int m=load();printf("\n 原来的学生信息:\n");display(); /* 调用显示函数*/printf("\n");fp=fopen("student_list","a");printf("请输入想增加的学生数:\n");scanf("%d",&n);for (i=m;i<(m+n);i++){printf("\n 请输入新增加学生的信息:\n");printf("请输入学号: ");srand((int)time(0));st[i].num=rand()%10000+20000000;if(st[i].num!=st[i-1].num)printf("%8d ",st[i].num);printf("\n");printf("请输入姓名: ");scanf("%s",st[i].name);getchar();printf("请输入性别(f--女 m--男): ");scanf("%c",&st[i].sex);printf("请输入年龄: ");scanf("%d",&st[i].age);printf("请输入备注: ");scanf("%s",&st[i].beizhu);printf("\n");count=count+1;printf("已增加的人数:\n");printf("%d\n",count);}printf("\n添加完毕!\n");m=m+count;printf("\n显示增加后的所有学生信息:\n");printf("\n");save(m);display();fclose(fp);}void search()/*查询函数*/{int t,flag;do{printf("\n按学号查询请按,按姓名查询请按,按性别查询请按,按年龄查询请按,进入主函数按\n");scanf("%d",&t);if(t>=1&&t<=5){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(t){case 1:printf("按学号查询\n");search_num();break;case 2:printf("按姓名查询\n");search_name();break;case 3:printf("按性别查询\n");search_sex();break;case 4:printf("按年龄查询\n");search_age();break;case 5:main();break;default:break;}}}void search_num(){int num;int i,t;int m=load();printf("请输入要查找的学号:\n");scanf("%d",&num);for(i=0;i<m;i++)if(num==st[i].num){printf("\n已找到此人,其记录为:\n");printf("\n学号\t姓名\t性别\t年龄\t备注 \n");printf("\n%d\t%s\t%c\t%d\t%s\t%s\t%s\t%ld\n",st[i].num,st[i].name,st[ i].sex,st[i].age,st[i].xueli,st[i].beizhu,st[i].addr,st[i].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按,继续查询学号请按\n");scanf("%d",&t);switch(t){case 1:search();break;case 2: break;default:break;}}void search_name(){char name[10];int i,t;int m=load();printf("请输入要查找的姓名:\n");scanf("%s",name);for(i=0;i<m;i++)if(strcmp(st[i].name,name)==0){printf("\n已找到,其记录为:\n");printf("\n学号\t姓名\t性别\t年龄\t备注 \n");printf("\n%d\t%s\t%c\t%d\t%s\t%s\t%s\t%ld\n",st[i].num,st[i].name,st[ i].sex,st[i].age,st[i].xueli,st[i].beizhu,st[i].addr,st[i].tel);}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按,继续查询姓名请按\n");scanf("%d",&t);switch(t){case 1:search();break;case 2:break;default :break;}}void search_sex(){char sex;int i, t;int m=load();printf("请输入要查找的性别:\n");scanf("%c",sex);for(i=0;i<m;i++)if(sex==st[i].sex){printf("\n已找到此人,其记录为:\n");printf("\n学号\t姓名\t性别\t年龄\t备注 \n");printf("\n%d\t%s\t%c\t%d\t%s\t%s\t%s\t%ld\n",st[i].num,st[i].name,st[i].sex,st[i].age,st[i].xueli,st[i].beizhu,st[i].addr,st[i].tel);b reak;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按,继续查询性别请按\n");scanf("%d",&t);switch(t){case 1:search();break;case 2:break;default :break;}}void search_age(){int age;int i, t;int m=load();printf("请输入要查找的年龄:\n");scanf("%d",&age);for(i=0;i<m;i++)if(age==st[i].age){printf("\n已找到此人,其记录为:\n");printf("\n学号\t姓名\t性别\t年龄\t备注 \n");printf("\n%d\t%s\t%c\t%d\t%s\t%s\t%s\t%ld\n",st[i].num,st[i].name ,st[i].sex,st[i].age,st[i].xueli,st[i].beizhu,st[i].addr,st[i].tel);b reak;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按,继续查询年龄请按\n");scanf("%d",&t);switch(t){case 1:search();break;case 2:break;default :break;}}void modify() /*修改函数*/{int num;char name[10];char sex;int age;char xueli[30];char beizhu[50];char addr[30];long int tel;int b,c,i,n,t,flag;int m=load(); /*导入文件内的信息*/printf("\n 原来的学生信息:\n");display(); /* 调用显示函数*/printf("\n");printf("请输入要修改的学生的姓名:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(st[i].name,name)==0){printf("\n已找到此人,原始记录为:\n");printf("\n学号\t姓名\t性别\t年龄\t备注 \n");printf("\n%d\t%s\t%c\t%d\t%s\t%s\t%s\t%ld\n",st[i].num,st[i].name,st[i].sex,st[i].age,st[i].xueli,st[i].beizhu,st[i].addr,st[i].tel);printf("\n确实要修改此人信息请按; 不修改请按\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.学号2.姓名3.性别4.年龄5.备注\n");printf("请输入你想修改的那一项序号:\n");scanf("%d",&c);if(c>8||c<1)printf("\n选择错误,请重新选择!\n");}flag=0;}}if(flag==1)printf("\n对不起,查无此人!\n");do{switch(c) /*因为当找到第i个学生时,for语句后i自加了,所以下面的应该把改后的信息赋值给第i-1个人*/{case 1:printf("学号改为: ");scanf("%d",&num);st[i-1].num=num;break;case 2:printf("姓名改为: ");scanf("%s",name);strcpy(st[i-1].name,name);break;case 3:printf("性别改为: ");getchar();scanf("%c",&sex);st[i-1].sex=sex;break;case 4:printf("年龄改为: ");scanf("%d",&age);st[i-1].age=age;break;case 6:printf("备注改为: ");scanf("%s",beizhu);break;}printf("\n");printf("\n是否确定所修改的信息?\n 是请按; 不,重新修改请按: \n");scanf("%d",&b);}while(b==2);printf("\n显示修改后的所有学生信息:\n");printf("\n");save(m);display();printf("\n继续修改请按,不再修改请按\n");scanf("%d",&t);switch(t){case 1:modify();break;case 0:break;default :break;}}。

相关主题