学生籍贯信息记录簿系统课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言课程设计
学生籍贯信息记录簿系统
院(系)别
班级
学号
姓名
指导教师
时间2010-6-12—2008-6-24
课程设计任务书
题目学生籍贯信息记录簿考试系统
系(部)
专业
班级
学生姓名
学号
6 月12 日至 6 月24 日共 2 周
指导教师(签字)
系主任(签字)
年月日
成绩评定表
摘要
这次程序设计,我选择的是设计学生籍贯信息记录簿系统的程序,之所以选择要设计这个程序首先因为我自己认为这个程序非常实用,虽然说老师给我们的每一个程序都很实用,但是在平时籍贯信息比较常用。
其次,通过向信息的同学了解,建立这个程序有一个方法就是利用链表,而我们的C语言课还没有学到这一步呢,我自己觉得挺有挑战性的,就打算在同学的帮助下编写这个程序了。
其实,刚拿到这个题目,真的没有什么头绪,但是在同学的帮助下,通过自己看课本,通过上网查资料,通过向老师询问,根据自己制定的进程安排,我还是完成了任务。
通过为期一周的课程设计,我对编程有了更加深刻的认识,也让我学到了一些关于用指针处理链表的知识,增强了自己的动手操作能力。
这一周的课程设计,让我对以前学过的知识有了一个更好的巩固,同时也增加了我的新的知识,使我受益匪浅,也让我对Visual C++ 6.0有了进一步的了解,而且,在编程过程中我也学到了许多的东西,也让我明白了一个道理:不管做什么事情,态度是最重要的。
关键字:学生籍贯信息记录簿,链表,指针
Abstract
To increase the capacity of practices we have created more going to be able to operate the knowledge learned, the school has arranged for two weeks, especially our Visual C + + to carry out a practical design courses Masu.
Detailed description of this file under Visual C + +6.0 environment, the process of designing a single software, this software is that the number of different data statistics.
This software features, users enter a single-stage character, the software records the number of letters in each kind of data, the number of data in English, the number of numeric data, empty data include the number of the number and types of data that shows clear them.
The following courses through the design and description, data description and statistical software to adjust the program description, and to develop overall direction, describes the process of making the program more, action , can perform various operations.
Keyword:Multiple Choice,Head Files,VC++6.0
目录
前言 (1)
第1章软件设计内容 (2)
1.1软件达到的目的 (2)
1.2软件功能说明 (2)
1.2.1功能分析说明图 (2)
1.2.2各项功能说明 (3)
第2章软件设计环境与原理 (12)
2.1设计环境与模块的划分 (12)
2.1.1软件设计环境 (12)
2.1.2软件模块的划分 (12)
2.2软件设计主要原理 (13)
2.2.1采用的主要数据结构类型 (13)
第3章软件的设计过程 (14)
3.1各软件模块之间的调用方式 (14)
3.3数据保存方式以及格式 (14)
第4章运行程序并截图以及对应的编程 (14)
第5章总结 ................................................................... 错误!未定义书签。
致谢.. (26)
前言
随着计算机技术的发展,可视编程技术占有了越来越重要的作用。
Visual C++6.0 是一种功能强大行之有效的可视化编程工具。
因此此软件是在Visual C++6.0环境下编写的。
对于我们,随着学习的深入,已经大体掌握了Visual C++6.0环境下的程序开发。
为了将我们的编程能力提升到一个更高的水平,深化面向对象的编程思维和解决问题的能力,值此课程设计周期间,进行基于Visual C++6.0环境的软件开发,先以字符统计软件作为开始,对Visual
C++6.0环境和面向对象程序设计进行回忆和熟悉,使得在此基础上的下一个员工培训系统软件的开发进行的更加顺利。
本文档详细叙述了基于Visual C++6.0环境下的字符统计软件的设计过程以及程序源代码。
本文档从概要设计,详细设计,参考源程序代码以及显示程序运行的截屏等方面详尽的介绍了软件开发过程。
此次字符统计软件的开发目的是使我们用面向对象的方式来思考和解决问题的能力,并且可以掌握字符数组的使用、字符指针的使用、类的设计和使用以及C++语法。
本文档的安排如下:
第一章软件设计内容。
第二章软件设计环境与原理。
第三章软件设计过程。
第四章主要对字符统计软件进行调试,运行程序并截图,显示运行界面和结果。
第五章主要介绍了软件开发过程中遇到的一些问题,对该软件进行的一个总结。
程序在设计的过程中遇到的问题已及时更正,但由于编者的能力和水平有限,字符统计软件和文档中不免会出现一些不期待的错误,望文档读者能够理解和体谅,并欢迎提醒和纠正,在此表示感谢以及敬意。
第1章软件设计内容
1.1软件达到的目的
该软件主要是编辑一个学生籍贯信息记录簿每个学生信息包括:学号、姓名、籍贯。
具体功能:
(1)创建信息链表并以磁盘文件保存;
(2)读取磁盘文件并输出所有学生的籍贯信息;
(3)按学号或姓名查询其籍贯
(4)按籍贯查询并输出该籍贯的所有学生
(5)能添加、删除和修改学生的籍贯信息
(6)显示输出四川籍和非四川籍的所有学生的信息并可分别存盘.
1.2 软件功能说明
1.2.1 功能(分析)说明图
该软件功能分析说明图如1-2-1所示:
上面是开始菜单中显示的主页面。
1.2.2 各项(功能说明):
(1)学生基本信息的录入:
这部分的功能主要包括信息的录入,首先按程序提示输入学生的学号,接着是分别输入有关学生的相关信息包括姓名、籍贯等。
在录入数据的同时,系统将对信息的合法性进行检验,若用户录入了不合法的数据系统将会作出提示,并且要求重新输入。
如果合法性成立则录入完毕后系统将返回主业面。
主业面中还有显示学生全部信息,按学号和姓名查询,输出四川籍和非四川籍的学生,退出等功能,并且这些函数用后的信息都会写到你所指定的文本文件中。
(2)显示学生信息:
此功能是将原录入的学生信息读出,并在屏幕上显示出来,并且录入到你所指定的文本文件中。
(3)学生信息读取:
进入该项功能界面后,用户可以对学生的个人信息进行查看,并且录入到你所指定的文本文件中。
(4)按学号或姓名查找学生信息:
此项功能可以根据用户输入的选择查出该学生的所有信息。
并且录入到你所指定的文本文件中。
(5)删除和修改个人信息:
选择次项功能后,系统将自动在屏幕上显示按姓名学号录入原来同学的个人信息,输入后进行修改,并且录入到你所指定的文本文件中。
(7)显示输出四川籍和非四川籍的所有学生的信息:
选择此项功能后,系统将自动在屏幕上显示四川籍学生分为一组,非四川籍学生分成一组。
(8)退出系统,结束任务。
如果无意按错了则可以按提示重新返回主页面。
第2章软件设计环境与原理
2.1 设计环境与模块的划分
2.1.1 软件设计环境
Microsoft Visual C++ 6.0
2.1.2 功能(模块层次图):
该软件主要组成模块和各个模块之间的调用关系如图2-1:
2.2 软件设计主要原理
2.2.1 采用的主要数据结构类型
该程序采用的是结构体类型来处理学生的所有基本信息,如下所述。
包含的库函数有:
#include<stdio.h>
#include<string.h>
#include<windows.h>用于界面的设计
#include <ctype.h>比较字符串
#include <stdlib.h>文件的使用
包含的函数有:
main() //主函数
recordplatform()//系统标题函数
xuanzekuangjia()//选择框架函数
tuichuxitong()//0.退出学生籍贯管理系统函数
shuruxinxi()//1.输入学生信息函数
Xianshi信息()//2.显示信息函数
xinxitongji()//3.学生信息统计函数
xiugaishanchuxinxi()//4.学生信息修改删除函数
tiaojianchaxun()//5.学生条件查询函数
tiaojianshuchu()//6.条件输出函数
gengxinxinxi()//7.更新学生信息函数
第3章软件的设计过程
3.1 各软件模块之间的调用方式
程序中各个模块之间的调用方式主要是通过函数的调用实现的。
先使用主函数调用框架函数,然后在框架函数中调用不同功能的函数,达到对学生信息管理的目的。
3.2 数据保存方式以及格式
本学生信息系统将能自动把输入的学生信息保存为C://1 .txt文件中,在文件的读取时,系统将能自动把该二进制文件读出,并在屏幕上显示出学生信息。
前提是必须在C盘中创建1 .txt文件。
第4章设计结果与错误分析与错误解决方案
对此程序的一些细节和具体的操作方法加以说明,说明如下:
利用#include<windows.h>设计的界面。
下面是框架设计代码和所包含的调用函数:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<windows.h>//开始界面
#define MAX 50
typedef struct
{
char num[50];
char name[50];
char address[50];
}
Student;
Student stu[MAX];
int n;
int t;
int s=0;
void Input();
void Display();
void Readfile();
void Modify();
void Save1();
void Save2();
void Dis();
void Find(int i);
void main()
{
char choose;
do
{
if(s==0){
int M=35;
Sleep(1);
printf("\n");
printf(" 现在载入完成\n");
Sleep(200);
printf("\n");
printf("\n");
Sleep(10);
printf("\n");
Sleep(10);
printf(" 欢迎大家进入-------☆-【李忠凯】-☆------籍贯管理系统\n");
Sleep(200);//延时
system("pause"); //暂停
system("cls"); //清屏
fflush(stdin);
s++;
}
printf("
**********************************************************");
printf(" 1.输入信息并存档\n"); printf(" 2.读取信息并显示\n");
printf(" 3.按学号或姓名查询籍贯\n");
printf(" 4.修改(删除)指定姓名或学号的学生的姓名和籍贯\n");
printf(" 5.显示输出四川,非四川学生信息\n");
printf("
**********************************************************");
printf("\n");
scanf("%s",&choose);
switch(choose)
{
case '1':{Input();Save1();}break;
case '2':{ Readfile();Display();}break;
case '3':{Find(1);Readfile();}break;
case '4':{ Find(0);
Readfile();}break;
case '5':{Readfile();
Dis();}break;
default:printf("输入错误,请重新输入:\n");
}
}
while(1);
}
void Save2(int t)
{
FILE* fp;
fp=fopen("student.dat","w");
fprintf(fp,"%s %s %s\n",stu[t].num,stu[t].name,stu[t].address);
fclose(fp);
//fp.clear();
}
上面是我设计的程序的主页面,供使用者选择任务。
在输入任务是必须选择1-5这几个数字,如果输入字母或别的数字则会出现下面的错误提示:
解决方案:先用判断数字的方式只取1-5这几个数字,别的数字错误。
同时用while((s=getchar())!='\n');语句吃掉字母,从而解决上面的错误。
void Input()
{
n=0;
do
{
printf("请输入第%d个学生信息 ,输入“EXIT”结束输入(输入格式:学号姓名籍贯 )\n",n+1);
scanf("%s",stu[n].num);
if(strcmp(stu[n].num,"EXIT")==0) break;
scanf("%s",stu[n].name);
scanf("%s",stu[n].address);
n++;
}
while(1);
}
void Save1()
{
int i;
FILE* fp;
if((fp=fopen("student.dat","a+"))==NULL)
fp=fopen("student.dat","w");
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %s\n",stu[i].num,stu[i].name,stu[i].address);
}
fclose(fp);
}
void Display()
{
int i;
printf(" 学号姓名籍贯:\n");
for(i=0;i<n;i++)
{
printf("%5s %5s %5s\n",stu[i].num ,stu[i].name ,stu[i].address);
}
}
上面是输入信息的界面和代码:输入信息是只能按提示输入,否则输入错误。
姓名可以输入字母,数字和别的字符。
输入EXIT可以结束输入
上面是输入学生信息后显示的信息界面和代码。
void Readfile()
{
FILE *fp;
if((fp=fopen("student.dat","r"))==NULL) return ;
n=0;
while(!feof(fp))
{
fscanf(fp,"%s%s%s",stu[n].num,stu[n].name,&stu[n].address); n++;
}
fclose(fp);
}
void Find(int f)
{
int i;
int choose,k;
char ans[50];
do
{
printf("1.按学号查询\n");
printf("2.按姓名查找\n");
printf("3.返回主菜单\n");
scanf("%d",&choose);
if(choose==1||choose==2)
{
printf("请输入姓名或学号\n");
scanf("%s",ans);
k=-1;
if(choose==1)
{
for(i=0;i<n;i++)
if(strcmp(ans,stu[i].num)==0)
{
k=i;break;
}
}
else
{
for(i=0;i<n;i++)
if(strcmp(ans,stu[i].name)==0)
{
k=i;break;
}
}
if(k==-1)
printf("不存在该学生信息\n");
else
{
if(f==1)
printf("%s %s %s\n",stu[k].num,stu[k].name,stu[k].address);
else
Modify(k);
}
}
else return;
//else continue;
}
while(1);
}
上面是按学号和姓名查询出的结果。
如果输入错误则出现以上界面
void Save2(int t)
{
FILE* fp;
fp=fopen("student.dat","w");
fprintf(fp,"%s %s %s\n",stu[t].num,stu[t].name,stu[t].address);
fclose(fp);
//fp.clear();
}
void Modify(int t)
{
int choose;
int i;
printf("1.删除\n");
printf("2.修改\n");
scanf("%d",&choose);
if(choose==1)
{
for(i=t;i<n-1;i++)
{
stu[i]=stu[i+1];
}
n--;
}
else
{
printf(">>>>请重新输入该学生信息:\n");
scanf("%s %s %s",stu[t].num,stu[t].name,&stu[t].address);
}
Save2( t);
}
void Readfile()
{
FILE *fp;
if((fp=fopen("student.dat","r"))==NULL) return ;
n=0;
while(!feof(fp))
{
fscanf(fp,"%s%s%s",stu[n].num,stu[n].name,&stu[n].address); n++;
}
fclose(fp);
}
下图便是修改学生信息的画面,一切按画面提示来操作
void Dis()
{
int i;
printf("四川学生:\n");
printf("学号姓名籍贯\n");
for(i=0;i<n;i++){
if(strcmp(stu[i].address,"四川")==0)
{
printf("%s %5s %5s\n",stu[i].num,stu[i].name,stu[i].address);
}
}
printf("\n");printf("\n");
printf("非四川学生:\n");
printf("学号姓名籍贯\n");
for(i=0;i<n;i++){
if(strcmp(stu[i].address,"四川")!=0)
{
printf("%s %7s %5s\n",stu[i].num,stu[i].name,stu[i].address);
}
}
}
上面画面是输出四川和非四川的学生
第五章课程设计总结
学习C++这门课程已经一个学期了,就向人们所说的那样,的确不容易学好。
我以前没有从事程序设计的实际经验,而且觉得将来也不一定是C++专业开发人员,所以对于学习C++的目的是什么,以及应该学到什么程度都没有很明确的目标,一直就是跟着课程教学计划按部就班的进行着:上课——上机——写报告,而且还觉得自己学的还不错,自己可以写一些简单的程序,复杂的程序经过钻研也能看懂。
但是这次的课程设计让我看到自己原来的想法有多么荒唐,而且这三周的学习让我认识到很多C语言的内在要素:
1.程序设计语言是程序设计的工具。
这是我通过三周课程设计深深体会的一点,并且发现如果想有效的进行程序设计,正确地应用程序设计语言表达算法,必须准确的运用程序设计语言,掌握其语法知识。
2.学习程序设计必须重视时间环节,多读程序,多编写程序,多上机实践。
这次的课程设计就使得课堂教学、式样和实践之间的关系更为紧密。
对我的学习有着很深远的影响。
3.我发现作为一个程序设计人员,需要掌握面向过程的程序设计,也要掌握面向对象的程序设计。
从前,人们通过C语言学习面向过程的程序设计,再通过C语言学习面向对象的程序设计。
其实C语言并不是纯粹的面向对象的语言,它是一种混合语言。
学习C语言既可以编写面向过程的程序,也可以编写面向对象的程序。
这一点是我通过可课程设计所的实践发现的。
4.深切的感受到了C语言语法的复杂,内容的繁多。
发现如果对它缺乏系统的了解,将难以真正的运用,编出来的程序错误百出,编译出错,事倍功半。
这次的C语言课程设计很快就要结束了,想说的是,这二周实践所学到的东西比我一个学期在教室学到的东西要多。
设计中遇到很多难题,都是费了很大劲才解决得,我在个性签名中是这样写的:“为了这个课程设计,我已经开始拼命了。
”这是实话,为了找相关的书籍,跑了好多大学的图书馆,忙的一天只吃一个饼,喝一杯奶茶,。
但是所有的努力都没有白费,我的课程设计终于“竣工”了,而且更是从中感受到了一些书本上和课堂上所不能感受到的。
庞老师每周两次的见面让我的程序设计进行的更加顺利,每次庞老师都会指出我做的好的地方,并给以鼓励,让我既有继续写下去的激情;也会指出我的不足和错误,让我可以及时改正,事半功倍。
感谢老师的辛勤教导!同时感谢所有帮助过我的同学!
致谢
经过这一周的实习,我们获得了许多在课堂上听课而不能获得的知识,首先我们要感谢学校给我们安排的这次的C 语言程序设计实习,然后我要感谢老师们对我们热心的指导和帮助,是他们教会了我们怎样解决问题的方法,这样我们的软件设计才会更加顺利地进行,并且充分掌握了设计程序的方法。
我还要感谢许多同学的帮助,他们的帮助对于我们来说也是必不可少的。
总之,是有了他们的帮助,我们才能顺利地完成软件设计,在这里我们要向他们说一句:谢谢,非常感谢!你们辛苦了!我相信在以后的学习中我会更加努力的学习,从而学到更多的东西。
参考文献
[1]、谭浩强,C++语言程序设计,北京清华大学出版社,2008年3月
[2]、谭浩强,张基温,C语言程序设计教程(第三版),高等教育出版社,2008年4月
[3] Beck Zaratian.Microsoft Visual Visual C++ 6.0程序员指南.希望图书创作室译.北京:北京希望电脑公司出品,1998
[4]Richard C.Leinecker,Tom Archer. Visual C++ 6 宝典.张艳,张谦译.北京:电子工业出版社,1999
[5] 李强,贾云霞. Visual C++项目开发实践.北京:中国铁道出版社,2004
[6] 郑莉,董渊,张瑞丰.C++语言程序设计.2003.
[7] Kuehnlw M R, Peeken H, Troeder C et al. The Toroidal Drive. Mechanical Engineering, 1981, 103 (2):32-39.。