当前位置:文档之家› c语言课程设计--同学录系统

c语言课程设计--同学录系统

目录1.摘要 (2)2.功能与数据分析 (3)2.1功能分析 (3)2.2数据分析 (3)3.总体设计 (4)3.1设计框图 (4)4.模块介绍 (5)4.1添加功能 (5)4.2显示功能 (6)5.编写与测试 (7)5.1程序问题及解法 (7)6.用法说明 (8)6.1程序用法 (8)7.总结 (12)8.附录 (13)摘要车站的票务管理系统的主要的目的在于便于掌握当天的车次运行情况,对运行信息进行添加和删除,也有利于旅客按各种不同的方式查询自己所需要的车次情况。

摆脱了繁琐的劳动,提高了工作的效率,大大提高了车站资源的利用率,便于旅客及时准确地获得需要的信息。

主要通过数组存放数据,应用循环和选择语句对数据实现录入和删除功能。

关键词:车次信息,结构体数组,选择结构,循环结构2 功能分析2.1功能分析这是一个同学录系统,便于同学信息的查询、修改、删除、添加。

数据以文件的形式保存在文件中。

显示时,数据从文件中输入到显示器。

接受数据的则应该是一个结构体数组,再显示;或一个结构体变量,读取一次数据,显示在显示器上,然后再接受数据,不停的循环,直到文件中的数据被读完为止。

查询时,只需要选定所要查询同学的编号,就会显示出改同学的全部信息。

删除功能的实现,需要首先打开文件,把文件里面的信息全部输入到结构体数组中。

然后根据程序选中的同学信息覆盖。

修改时,只需要选定该同学的编号,对他(她)的内容逐一进行修改。

添加,输入编号及其学生信息即可。

2.2数据分析由于显示的内容包括姓名、性别、生日、同学类型、籍贯、以及工作单位,所以必须一个结构体的数组来实现。

写入文件还需要对文件进行操作。

需要定义一个指向文件的指针。

文件名为“file1.txt”,生成在默认的TC的安装目录里边。

查询需要输入想要的一些内容,这些数据的类型和结构体的元素的类型一致,所以需要定义一个整型的number,一个整型的name,一个字符串sex,一个字符串birth,一个字符串type,一个字符串jiguan,一个字符串job。

此外,循环所需要的整型的数和一个计数器。

系统在接受你输入的字符,以判断程序的走向,还需要一个字符型的变量来接受输入的提示。

3 总体设计3.1 设计框图本程序涉及到几个方面功能:添加,删除,显示,查询,修改和退出。

我的任务主要是几个功能的实现。

所以这里只对各个功能做详细阐述,总体设计只简单描述。

先定义一个结构体的数组和一个结构体变量。

通过循环的方式,向变量赋值,采用追加的方式打开文件,然后在文件中输出,即把信息保存在文件中。

由此可以进行输入或添加的功能。

把信息从文件输入到结构体数组,每输入一遍,结构体数组b[i]中i自加,记数器自加1,可表示一共有几组信息。

然后i从0到计数器最后显示的大小,循环输出结构体数组的值到显示器。

以达到显示的目的。

运行程序,显示器上显示查询,修改,删除、添加和退出几项后,要求输入对应的编号。

输入标号n,进入查询项目,是按姓名查询。

显示的内容包括姓名、性别、生日、同学类型、籍贯、以及工作单位。

输入标号c,进入查询项目,是按类型查询。

显示的内容包括姓名、性别、生日、同学类型、籍贯、以及工作单位输入标号s,进入删除项目。

选中要删除的同学编号,程序会删除该同学的所有信息。

输入标号x,进入修改项目。

输入标号r,进入添加项目输入标号e,退出系统。

所显示的内容的进行图表示:(见图3-1)4 模块介绍我的主要任务是各个功能的实现,这里主要介绍这各个功能模块。

4.1 两个查询功能几个功能都是直接在主函数中进行的,外部主要定义了按几种方式查询的函数和屏幕提示内容显示的一些函数。

下面就几个重要的功能模块做详细介绍:查询:先定义一个变量stu.number,选择查询按扭后,在stu.number不为0的前提下,显示你如果输入大或小写的n,你可以根据姓名查询信息,显示信息后返回开始界面;如果输入大或小写的c,你可以根据类型查询信息查询信息,显示信息后返回开始界面。

输入一个字符赋给字符型变量char,如果为大或小写的Y,以追加的方式打开文件file.txt,用键盘输入的方式分别输入,赋给变量p,写入文件,关闭文件。

仍满足stu.number 不为0,再循环。

查询的流程图如(图4-1):图4-1“4.2 删除与修改功能全部显示:数据在文件中,要把他从里边拿出来,显示在屏幕上。

首先打开文件,在内容不为0结束标志时,把里边的内容输出到结构体数组中,(循环的方式)。

然后再通过循环,显示结构体叔祖的内容到显示器。

删除的流程图如(图4-2):图4-2“删除”流程图修改流程图:5 调试与测试5.1程序的编写和调试我们在进行程序的编写的时候,首先设想好运行是画面信息的显示,设计好这个框架。

然后在这个框架中对应的地方添加函数,最后在主函数中实现文件的调试是在TC中进行。

最常见的错误有:某个字符没有定义,结构不匹配,缺少分号等等。

但是,此次问题比较严重的是在利用链表的时候,其利用的灵活性不是很好。

所一把链表的内容去掉,改为了结构体。

再一个就是对文件的操作不是很顺利,文件的输入和输出一直是困扰此次程序的主要原因。

主要表现在:1、不能生成文件。

该部分的主要的目的是把信息输入到文件中保存起来。

或者一些大小写的不统一。

函数的错误。

基本上属于粗心大意造成的错误。

再一个,程序在计算机房运行,可以生成文件。

但是同样的程序,带回寝室,在自己的机器上运行,则不能显示。

这也是困扰我很长时间的问题。

因为在次之前,我的序程序一直在此机器上调试。

不能生成文件,可能和此原因有关系。

2、查询时显示无限循环的乱码。

现象就不多作解释。

主要原因是,在输入要查询的车次号码、发车时间或其他的信息时,没有写上“&”取地址符。

以至于要查询的信息不能输入到程序。

要使得相同后显示的条件永远不能实现。

3、还存在一个算法上的错误。

修改前是这样的:for(i=0;i<j;i++)if(b[i].number==number)m=i;if(m==1)这是判断文件里面是否只有一项信息的代码。

错在m为1上。

如果只有一行,当i 等于0是成立,为1时结束循环,所以m永远不能为1,那么条件永远成立。

事实上把所有的信息都清空了。

以上是这次程序设计主要的几处问题的展示。

6 用法说明6.1 程序的使用1、在Windows XP VC++6.0环境下运行次程序,显示为:(如图6-1)图6-1主显示其中n按姓名查询,c为按类别查询,s是信息删除,x是修改信息,e是退出程序r是添加功能2、我们首先按n,进入按姓名查询:(如图6-2)输入编号:图6-2管理显示3、按c为按类别查询:与上面类似就不做介绍了。

4、按s进入删除信息系统:输入编号:5、修改同学的信息:输入编号:修改:6、添加同学信息:添加:各种功能正常进行总结课程设计总结通过此次课程设计,我基本上对制作一个相对来说比较大的程序有了一定的认识和了解。

这一周多来的制作,不但对这一学期C语言的知识有了一定的巩固,还增加了我们的动手能力。

就这个体统而言,涉及到结构体,文件和循环的知识,所以尤其对这几个方面有所加深和巩固。

其中又包括结构体的赋值,写到文件中。

从文件中赋值给结构体。

此外,还接触到几个我们平时接触不是很多的函数:头文件:#include<stdio.h>#include<process.h>#include<string.h>#define p "%ld %s %s %s %s %s %s\n"返回值:输出成功时,返回输出的字节数;错误时,返回主函数。

此外还有goto函数,虽然用的很少,但是关键时候还是很好用的。

但是也的确在此次上机对他们有所了解。

这个系统也存在许多不足:1、没有建立文档。

2、由于上面的关系,程序显得繁琐,而且不能打印,和保存。

同时在这里,也希望我自己能够很好的利用眼前假期的时间,好好学习有关C语言变成的知识,为下学期的编程课程打下基础。

也是对以前学习过的知识是一种复习和巩固。

这就是我对这次课程设计的一点总结附录:源程序代码#include<stdio.h>#include<process.h>#include<string.h>#define p "%ld %s %s %s %s %s %s\n"struct student{long num;char name[100];char sex[100];har birth[100];char type[100];char jiguan[100];char job[100];}stu[100]={{1,"小陈","男","1989、3、18","大学同学","汉","学校"},{2,"小李","男","1989、3、28","大学同学","汉","银行"},{3,"小王","女","1990、7、14","大学同学","满","警察局"},{4,"小吴","男","1989、6、22","中学同学","汉","饭店"},{5,"小罗","女","1990、5、18","中学同学","苗","博物馆"},{6,"小文","女","1989、3、25","中学同学","苗","图书馆"},{7,"小肖","男","1989、6、6","小学同学","汉","旅馆"},{8,"小刘","男","1989、4、8 ","小学同学","汉","网吧"},{9,"小魏","女","1990、8、13 ","小学同学","汉","软件公司"}};void introduce(){int a,i,j;printf("您想查询哪个同学的详细信息?请输入姓名编号:");scanf("%d",&a);getchar();printf("\n");for(i=0;stu[i].num!=0;i++)if(stu[i].num==a)break;printf(p,stu[i].num,stu[i].name,stu[i].sex,stu[i].birth,stu[i].type,stu[i].jiguan,stu[ i].job);}void introduces(){char b[10];int i,j;printf("你想查询那类学生的信息?请输入类别:");scanf("%s",&b);getchar();printf("\n");for(i=0;stu[i].num!=0;i++)if (strcmp(stu[i].type,b)==0)printf(p,stu[i].num,stu[i].name,stu[i].sex,stu[i].birth,stu[i].type,stu[i].jiguan,stu[ i].job);}void del(){long d;int i,j;printf("你想删除那个学生的信息?请输入编号:");scanf("%ld",&d);getchar();for(i=0;stu[i].num!=0;i++)if(stu[i].num==d)/*找到了需要删除的学生,即stu[i]*/for(j=i;stu[j].num!=0;j++)stu[j]=stu[j+1];}void xg(){long f;int i;printf("你想修改那个学生的信息?请输入编号:");L: scanf("%ld",&f);getchar();for(i=0;stu[i].num!=0;i++)if(stu[i].num==f){printf("小陈男 1989、3、18 大学同学汉学校\n");printf("请严格按照上面格式输入:");scanf("%s%s%s%s%s%s",stu[i].name,stu[i].sex,stu[i].birth,stu[i].type,stu[i].jiguan,stu [i].job);getchar();break;}if(stu[i].num==0){ printf("无,请重新输入:\n");goto L;}}void rand(){int i;printf("1 小陈男 1989、3、18 大学同学汉学校\n");printf("请严格按照上面格式输入:");for(i=0;stu[i].num!=0;i++)if(stu[i-1].num!=0&&stu[i].num==0)break;scanf("%d%s%s%s%s%s%s",&stu[i].num,stu[i].name,stu[i].sex,stu[i].birth,stu[i].type,stu [i].jiguan,stu[i].job);getchar();}void main(){char k;int i;while(1){printf(" ___________________________________________________ \n");printf("| 欢迎使用同学信息查询系统! |\n");printf("| |\n");printf("| 1.同学信息查询(按姓名查询:n键、按类别查询:c键) |\n");printf("| 2.删改同学信息(删除信息按:s键、修改信息按:x键) |\n");printf("| 3.退出系统……请按 e 键. 4.添加信息请按:r键 |\n");printf(" ___________________________________________________ \n");printf("同学姓名:\n");for(i=0;stu[i].num!=0;i++)printf("%ld %s\t",stu[i].num,stu[i].name);if("(stu[i].num%9==0")printf("\n");printf("\n");printf("请选择服务:");scanf("%c",&k);printf("\n\n");switch(k){case 'n':case 'N':printf("进入同学信息查询...\n\n");introduce();break;case 'c':case 'C':printf("进入同学类别信息查询...\n\n");printf("\n");introduces();break;case 's':case 'S':printf("进入同学信息删除系统...\n\n");printf("\n");del();printf("删除成功!\n");break;case 'x':case 'X':printf("进入同学信息修改系统...\n\n");xg();printf("修改成功!\n");break;case'r':case'R':printf("进入同学信息添加系统...\n\n");rand();break;case 'e':case 'E':exit(0);default:printf("输入信息错误!\n请重新选择服务!\n"); getchar();break;}}}参考书籍:[1]郭立山、吴天等编著,C函数使用手册,冶金工业学院出版社,2003.8[2]谭浩强、张基温、唐永炎编著,C语言程序设计教程,高等教育出版社,2005 [3]李建学等.数据结构课程设计案例精编(用C/C++描述).清华大学出版.2007-2-1 [4]严蔚敏等.数据结构(C语言版).清华大学出版社.2003-1。

相关主题