课程设计任务书课程名称C语言课程设计课题班级档案管理系目录1. 设计目的2. 总体设计3. 详细设计4. 调试与测试:5. 总结与体会6 .评分附:源程序清单和执行1.设计目的a)了解和掌握c语言面向对象程序设计的基本过程。
b)进一步熟悉C 语言的特点。
c)学会总体规划一个程序,从各个部分把一个程序完成好。
d)能够使自己的程序实现一定的功能,对C++产生一种浓厚的兴趣。
e)培养耐心,遇困难不退缩。
f)了解团队精神的重要性,团结合作。
加深对《C语言》课程所学知识的理解,进一步巩固C语言讲法规则。
学会编制结构清晰、风格良好、数据结构适当的C 语言程序,从而具备解决综合性实际问题的能力。
在熟练掌握C 语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自页眉减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。
进一步掌握各种函数的应用,以及文件的读写操作等。
2 总体设计主菜单界面学生档案管理☆☆☆土木工程☆☆☆爭*******1. 录入学生信息2. 显示学生信息3. 查询学生信息4. 删除学生信息5. 添加学生信息6. 修改学生信息7 退出****************** 谢谢使用******************信息录入1 按学号查询2 按姓名查询3 按性别查询4 按年龄查询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.调试与测试初步调试的结果出现问题较多,经过多次修正和调试解决了许多问题,调试完成后进入主菜单按1 录入学生信息,录入学生信息后可以通过提示按学号,姓名,性别,年龄进行查询。
还能按5 添加学生信息,按6 修改学生信息,按7退出。
5.心得与体会终于可以松口气了,经过一个思考,查资料,写源程序,上机调试,现在终于告一段落了。
看到自己的劳动成果,心中不免有些惊喜,没想到自己还能独立完成初次的课程设计。
这种课程设计是枯燥无味的, 但对C 语言这门程序语言的掌握却有非常大的作用.。
从开始对题目的分析,就注定摆在我这样一个对C 语言了解不多的新手面前的是一段艰难的旅程.但最终很庆幸的是我居然能够坚持下来,而且完成了设计工作。
C 语言是很难学的,这也许是因人而异, 但对我来说确实是一个障碍。
如今要自己完成一个课程设计,无疑是对自己的一个挑战.先是上网查找有关的资料,分析题目所需的数据,要用到哪些函数等等,星期二上网初步调试,将函数用些结构和语句连接起来,做这个工作时,又将书本翻阅了一遍,重新获得许多东西。
如带参函数的特点,以及页眉一些语句的运用及特点等等。
将工作分配到每块是我完成这个设计的主要方法,然而将每块都完成看起来比较轻松,但实际操作起来却是比较麻烦的。
由于平时对C 语言知识的积累较为匮乏,(这可能是最主要的原因了),所以操作起来真是寸步难行,没办法,只有拿出课本找到相应的知识点,临阵磨枪.费了一番功夫,再上机调试时就是最痛苦的时候了,错误一大堆,要一个一个的修改。
经过几翻调试修改之后终于可以执行了,那时还兴奋了好长时间呢!然而执行出来的结果是不令人满意的,界面不美观不说,最重要的是输入太烦琐,而且受到的限制太多,如只能以某种方式输入,且个数受限制。
于是又发费了大量时间去修改,终于比较满意了,但也到了星期五了,也就是答辩的时间。
答辩的时候我才发现还有好多知识是我不会的,老师问了我一些问题,我回答出来的却不多,我体会到我还要很努力的学习,在C 语言的学习上我还有很长的一段路要走。
今天不管怎样把这个设计作出来是件很高兴的事情,不过能够把这个设计顺利完成要归功于我的指导老师,帮了我很多忙,也让我发现了我有好多欠缺的地方,真的很感谢你们,谢谢!但不管怎么样,我还是完成了这个设计。
虽说累了点,但我想这对我们进一步掌握C 语言,并为下学期的计算机二级考试是有很大的帮助的.。
能够编出程序,其实本身就是对自己的一种肯定,是对自己前面一段时间学习C语言综合水平的一个检阅•当然完成后的兴喜,只有经历过了才能体会到。
而我体会到了.课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要7 / 19环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
源程序#include <stdio.h>#include <windows.h>#include <time.h>#include <string.h>#define N 100 struct 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("printf("\n");printf("printf("\n");☆☆☆土木工程☆☆☆\n");莎 *** 班**** 莎 \n");printf(" ****************** 学printf(" 1.录入学生信息"); printf(" 2.显示学生信息\n"); printf(" 3.查询学生信息"); printf(" 4.删除学生信息\n");printf(" 5.添加学生信息"); printf(" 6.修改学生信息\n"); printf(" 7•退出\n");printf(" ************************************\n"); 谢谢使用******************\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){flag=1;system("cls"); /*清屏 */menu(); /* 调用菜单函数 */ printf(" 请再次选择你需要操作的步骤 (1--7):\n"); scanf("%d",&n); printf("\n");}else exit(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--男): ");{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(" case 5:printf("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')♦ ♦♦输入学生信息♦ ♦ ♦ ♦ ♦♦显示学生信息♦♦♦ ♦ ♦♦按学号查询学生信息♦♦♦♦♦♦删除学生信息♦♦♦ \n");pri ntf("\n");del();break; ♦♦♦添加学生信息♦♦♦\n");pri ntf("\n");add();break;♦ ♦ ♦ 修 改 学 生 信 息 ♦ ♦ ♦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].beizh u,st[i].addr,st[i].tel);printf("\n 确实要删除此人信息请按1,不删除请按0\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 继续删除请按1,不再删除请按0\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 按学号查询请按1 ,按姓名查询请按2 ,按性别查询请按4,3,按年龄查询请按进入主函数按5\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].beiz hu,st[i].addr,st[i].tel);break;}if(i==m)printf("\n 对不起,查无此人\n");printf("\n");printf(" 返回查询函数请按1,继续查询学号请按2\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].beiz hu,st[i].addr,st[i].tel);}if(i==m)printf("\n 对不起,查无此人\n");printf("\n");printf(" 返回查询函数请按1,继续查询姓名请按2\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].beiz hu,st[i].addr,st[i].tel);break;if(i==m)printf("\n 对不起,查无此人\n");printf("\n");printf(" 返回查询函数请按1,继续查询性别请按2\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].beiz hu,st[i].addr,st[i].tel);break;}if(i==m)printf("\n 对不起,查无此人\n");printf("\n");printf(" 返回查询函数请按1,继续查询年龄请按2\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].beiz hu,st[i].addr,st[i].tel);printf("\n 确实要修改此人信息请按1 ; 不修改请按0\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 自加了1 ,所以下面的应该把改后的信息赋值给第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 是请按1 ; 不, 重新修改请按2:\n");scanf("%d",&b);}while(b==2);printf("\n 显示修改后的所有学生信息:\n");printf("\n");save(m);display();printf("\n 继续修改请按1,不再修改请按0\n");scanf("%d",&t);switch(t){case 1:modify();break;case 0:break;default :break;}}。