046 C语言《程序设计综合实践I》课程设计报告.docx
《046 C语言《程序设计综合实践I》课程设计报告.docx》由会员分享,可在线阅读,更多相关《046 C语言《程序设计综合实践I》课程设计报告.docx(19页珍藏版)》请在冰点文库上搜索。
046C语言《程序设计综合实践I》课程设计报告
《程序设计综合实践I》课程设计报告
设计题目:
个人信息管理系统
学号:
1707310346
姓名:
张坤钰
班级:
计算机173
指导老师:
崔耀东
完成日期:
2018年12月23日
_
1.设计题目与要求
设计实现一个个人信息管理系统
目的:
通过个人信息管理系统的设计,培养学生综合利用C/C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计。
基本要求:
合理运用C/C++语言的数组、指针、结构体及文件操作等,实现一个模拟的个人信息管理系统。
该系统可以对每个学生的消费、生活及学习进行系统的管理,把这几项内容综合在一起开发了具有个人特色的管理系统。
具体要求如下:
①学生的基本信息管理主要包括了学生的姓名、学号、性别、出生年月、专业、爱好等内容。
②消费模块主要包括个人消费记录。
主要功能有:
数据的添加、数据的查找、数据的删除、数据的修改、数据逐个显示、消费总额的显示等。
③学生课程成绩模块主要包括学习成绩记录。
主要功能有:
数据的添加、数据的查找、数据的删除、数据的修改、数据逐个显示、消费总额的显示等。
④要求在程序中能够运用结构化程序设计的选择和循环结构,并熟练使用相关的语句(如dowhile、for、if-elseif等)。
程序要有主菜单,能够完成主要的功能。
2.设计软硬件环境
开发平台:
Windows1064位操作系统,基于X64
使用Dev-C++进行程序编写
处理器:
intelCOREi5-7200U@2.50GHz2.71GHz内存:
8.00GB
3.功能设计与描述
设计系统的功能:
查找学生的基本信息,记录学生的消费信息和成绩信息,查看学生的消费信息和成绩信息,复制学生的消费信息,查看学生消费总额,学生成绩单的修改。
关键算法流程图主要运用了switch语句
图1功能模块图
图2算法流程图
4.源程序代码清单
(给出本次课程设计所编写的主要代码,例如,主函数及部分函数,即各功能函数中,可以只列出少数几个。
代码页数不超过4页,要求有注足够多的注释文字说明此程序的用途和大体工作过程。
所有代码需按缩进对齐格式排版)[代码字体为TimesNewRoman,字号5,行踪固定15磅]
#include"stdio.h"
#include"stdlib.h"
intinputchoice()//选择操作参数
{
intmychoice;
printf("\nEnteryourchoice:
\n");
printf("0_结束程序。
\n");
printf("1_学生消费数据的添加。
\n");
printf("2_学生成绩数据的添加。
\n");
printf("3_查看学生的基本信息。
\n");
printf("4_查询学生消费数据。
\n");
printf("5_查询学生成绩单。
\n");
printf("6_查询学生的消费总额。
\n");
printf("7_修改学生成绩单。
\n");
printf("8_复制学生消费信息。
\n");
scanf("%d",&mychoice);
printf("\n");
returnmychoice;
}
voidstformation()//学生的基本信息查询函数
{
charstname[3];
long_IDcard,_stuID;
char_major[3],_hobby[3];
inti;
charname[5],IDcard[5],stuID[5],major[5],hobby[5];
FILE*fp;
fp=fopen("d:
\\学生的基本信息.txt","r");
printf("学生的基本信息:
\n");
fscanf(fp,"%s%s%s%s%s",name,IDcard,stuID,major,hobby);
printf("%-12s%-12s%-12s%-12s%-12s\n",name,IDcard,stuID,major,hobby);
for(i=0;i<3;i++)
{
fscanf(fp,"%s%ld%ld%s%s",stname,&_IDcard,&_stuID,_major,_hobby);
printf("%-12s%-12ld%-12ld%-12s%-12s\n",stname,_IDcard,_stuID,_major,_hobby);
}
}
voidAddDataconsume()//学生消费数据编辑函数
{
FILE*fp;
inti;
charstname[5];
charname[5],foodpay[5],bookpay[5],the_otherspay[5];
int_foodpay,_bookpay,_the_otherspay;
fp=fopen("d:
\\学生消费信息.txt","w");
printf("请依次输入姓名,食物支出,学习支出,其它支出;这十四个字");
scanf("%s%s%s%s",&name,&foodpay,&bookpay,&the_otherspay);
fprintf(fp,"%-12s%-12s%-12s%-12s\n",name,foodpay,bookpay,the_otherspay);
printf("请输入学生姓名和他的各项支出。
\n");
for(i=0;i<3;i++)
{
scanf("%s%d%d%d",stname,&_foodpay,&_bookpay,&_the_otherspay);
fprintf(fp,"%-12s%-12d%-12d%-12d\n",stname,_foodpay,_bookpay,_the_otherspay);
}
}
voidAddDatareport()//学生成绩编辑函数
{
FILE*fp;
inti;
intmark_m,mark_e,mark_y;
charstname[5];
charmath[5],english[5],yuwen[5],name[5];
fp=fopen("d:
\\学生成绩单.txt","w");
printf("请依次输入姓名数学英语语文这8个字。
\n");
scanf("%s%s%s%s",&name,&math,&english,&yuwen);
fprintf(fp,"%-12s%-12s%-12s%-12s\n",name,math,english,yuwen);
printf("写出学生姓名和他各科的成绩:
\n");
for(i=0;i<3;i++)
{
scanf("%s%d%d%d",stname,&mark_m,&mark_e,&mark_y);
fprintf(fp,"%-12s%-12d%-12d%-12d\n",stname,mark_m,mark_e,mark_y);
}
}
voidCopyStPay()//复制学生消费数据
{
FILE*fp1,*fp2;
charch;
fp1=fopen("d:
\\学生消费信息.txt","r");
fp2=fopen("d:
\\学生消费信息2.txt","w");
while(!
feof(fp1))
{
ch=fgetc(fp1);
if(ch!
=EOF)
fputc(ch,fp2);
}
printf("学生消费信息复制成功!
\n");
}
voidInquiryStPay()//学生消费信息查询
{
FILE*fp;
inti;
charstname[5];
int_foodpay,_bookpay,_the_otherspay;
charname[5],foodpay[5],bookpay[5],the_otherspay[5];
fp=fopen("d:
\\学生消费信息.txt","r");
fscanf(fp,"%s%s%s%s",name,foodpay,bookpay,the_otherspay);
printf("%-12s%-12s%-12s%-12s\n",name,foodpay,bookpay,the_otherspay);
for(i=0;i<3;i++)
{
fscanf(fp,"%s%d%d%d",stname,&_foodpay,&_bookpay,&_the_otherspay);
printf("%-12s%-12d%-12d%-12d\n",stname,_foodpay,_bookpay,_the_otherspay);
}
}
voidInquiryStReport()//查询学生成绩单
{
FILE*fp;
inti;
charstname[5];
int_math,_english,_yuwen;
charname[5],math[5],english[5],yuwen[5];
fp=fopen("d:
\\学生成绩单.txt","r");
fscanf(fp,"%s%s%s%s",name,math,english,yuwen);
printf("%-12s%-12s%-12s%-12s\n",name,math,english,yuwen);
for(i=0;i<3;i++)
{
fscanf(fp,"%s%d%d%d",stname,&_math,&_english,&_yuwen);
printf("%-12s%-12d%-12d%-12d\n",stname,_math,_english,_yuwen);
}
}
voidInquiryStXFZE()//查询学生的消费总额
{
FILE*fp;
inti;
charname[5];
inta,b,c;//用来储存学生的各项消费
fp=fopen("d:
\\学生消费信息.txt","r");
fseek(fp,50L,0);
for(i=0;i<3;i++)
{
fscanf(fp,"%s%d%d%d",name,&a,&b,&c);
printf("%s总消费为%d元\n",name,a+b+c);
}
}
voidReviseStReport()//修改学生成绩单
{
FILE*fp;
chard[35];
printf("输入你要对学生说的话。
\n");
scanf("%s",d);
fp=fopen("d:
\\学生成绩单.txt","r+");
fseek(fp,250L,0);
fprintf(fp,"\n%s",d);
}
intmain(void)//主函数
{
FILE*fp;
intchoice;
while((choice=inputchoice())!
=0)
{
switch(choice)
{
case1:
AddDataconsume(fp);
break;
case2:
AddDatareport(fp);
break;
case3:
stformation(fp);
break;
case4:
InquiryStPay(fp);
break;
case5:
InquiryStReport(fp);
break;
case6:
InquiryStXFZE(fp);
break;
case7:
ReviseStReport(fp);
break;
case8:
CopyStPay(fp);
break;
default:
printf("输入错误。
\n");
break;
}
}
return0;
}
5.程序运行结果
(可截屏程序运行部分界面,对程序运行过程进行展示和必要的文字解释,最多3页)[正文宋体小四号,行距固定20磅]
如下图
程序运行界面简单明了,很容易看出程序运行的过程。
程序不同的功能由不同的模块控制,每一个模块都是一个独立的函数。
下面列有程序运行的4张截图对程序运行过程进行展示。
学生基本信息查询1
学生消费数据查询1
建立学生消费数据1
学生成绩查询1
6.设计总结
设计方法:
因为是要设计一个个人信息管理系统,考虑到为了方便数据的写入,数据的查看,数据的修改等功能,设计了不同的模块,每个模块用不同的函数编写,在主函数中运用switch()语句对这些函数进行调用,以完成上述的功能。
实现技术:
运用了C语言中文件的知识;文件指针的定义FILE*fp,文件的调用以及文件的打开方式fopen()函数。
C语言标准库stdlib.h中提供的文件的读写操作函数如:
字符方式文件读写函数fgetc()和fputc()。
fgetc()函数实现从fp所指示的磁盘文件中读入一个字符ch,函数调用格式为:
ch=fgetc(fp);
fputc()函数实现把字符ch写入到fp所指向的磁盘文件上,函数调用格式为:
fputc(ch,fp);
程序中运用了c语言程函数的定义与调用。
运用switch()语句对函数进行选择。
定义FILE指针来指向磁盘中的文件。
程序的功能有:
查看学生的基本信息。
对学生信息的写入。
对学生信息的查看。
对学生信息在磁盘文件中的追加。
在编写程序中的收获:
我完全忘记自己选了程序设计综合实践,所以在得知还有一周要提交报告时,内心时很慌的。
但第一步是最难的,只要第一步跨出去就成功了一半。
首先我先看自己的课程设计题目是什么,确定了课程设计的内容,根据内容要求确定程序编写的思路,在这个过程中发现程序编写要用到c语言文件的知识,但当初老师没讲,我就先花两天时间,在每天晚上带上电脑到6教6楼找个教室自学,把书上的程序,一个个的编写调试运行一遍,关于文件的概念都过一遍后,再开始编写程序。
本来想在程序中加一个用户信息加密和校检的模块(首先用户输入新的账号和密码,把密码进行加密,用户在以后要查询信息时只有输入的密码和磁盘文件中保存的密码对上了才能进行下一步操作),因为时间关系到期末了好多课程都要复习,想想还是算了,到假期在做。
在程序编写过程中遇到了一个文件指针移动控制函数fseek()调用格式为fseek(fp,offset,from);
offset表示以字节为单位的指针移动偏量。
这个函数觉得比较难用难以精确的确定指针偏移量,因为文件中不同类型的字符所占的字节都是不同的。
在写课程设计的过程中复习了很多曾经不在意的概念细节。
比如程序时人们为了解决某种问题用计算机可以识别的代码编排的一系列加工步骤。
程序设计语言在语法上一般要包含标识符、关键字、常量、运算符、分隔符、表达式、变量定义、语句、输入和输出、函数的定义和调用。
程序化程序设计有顺序结构、分支结构、循环结构等基本控制结构。
C语言程序设计的基本框架时main()有且仅有一个,从main()开始到main()结束在这个过程中根据程序功能可能会调用其它函数。
编写一个可运行的c语言程序需要经历的步骤:
问题分析和算法设计—>编辑程序—>编译—>运行和调试
如何用流程图描述简单的算法?
用图的形式掩盖了算法的所有细节只显示算法从开始到结束的整个流程。
搞明白了RAM与ROM的区别,程序要运行时把变量调如内存中,在使用完后立即释放,而有些信息把他存到磁盘中只有在使用时才把他调入内存中,简单的说就是[1]“许多程序在实现过程中,依赖于把数据保存到变量中,而变量是通过内存单元存储数据的,数据的处理完全由程序控制。
当一个程序运行完成或终止运行,所有的值不再保存。
如果程序的输入输出数据量不大,通过键盘和显示器即可解决。
当输入输出的数据量很大时,就会受到限制,带来不便。
文件是解决上述问题的有效办法,它通过把数据存储在磁盘文件中,得以长久保存。
当有大量数据输入时,可通过编辑工具事先建立输入数据的文件,程序运行时将不再从键盘输入,而从指定的文件上读入,从而实现数据一次输入多次使用。
同样,当有大量数据输出时,可以将其输出到指定的文件,不受屏幕大小限制,并且任何时候都可以查看结果文件。
一个程序的运算结果还可以作为其他程序的输入,进行进一步加工。
”
以前不懂为什么有的文件包含是#include这种格式,有的是#include“stdlib.h”这种格式。
因为在编写程序过程中的需要经过查书“文件包含中指定的文件名如果使用<>尖括号,将使用C语言的标准头文件,由编译程序到C系统中设置好的include文件夹中把指定的文件包含进来;如果使用到双引号,则编译程序首先到当前工作文件夹寻找被包含的文件,若找不到,再到系统include文件夹中查找文件,一般适用于编程者自己的包含文件,必要时可以在文件名前加上所在的路径。
在访问结构体成员时“.”与“->”的区别是前者时结构成员操作符。
后者是在使用指针访问结构成员时,所使用的指向运算符。
这在数据结构链表那块经常使用。
在定义一个结构时,关键字struct和它后面的结构名一起组成一个新的数据类型名。
结构的定义以分号结束,这是因为C语言中把结构的定义看作一条语句。
[1]
“结构类型是一种允许程序员把一些数据分量聚合成一个整体的数据类型。
一个结构中包含的每个数据分量都有名字,这些数据分量称为结构成员或者结构分量,结构成员可以时C语言中的任意变量类型,程序员可以使用结构类型来创建适合于问题的数据集合。
像数组和指针一样,结构也是一种构造数据类型(或叫派生数据类型),它与数组的区别在于:
数组中所有元素的数据类型必须是相同的,而结构中各成员的数据类型可以不同。
”
[1]
指针和指针变量在含义上存在一定差异。
“指针是一个概念,是计算机内存地址的代名词之一,而指针变量本身就是变量,和一般变量不同的是它存放的是地址。
指针变量所占的内存空间大小和它所指向的变量数据类型无关,不同类型的变量所占的内存空间不同,但不同类型的指针变量所占的内存空间大小都是相同的。
”
[1]
“C语言中数据类型有整型、实型和字符型,它们都属于基本数据类型。
除此之外,C语言还提供了一些更为复杂的数据类型,称为构造类型或导出类型,它由基本类型按一定的规则组合而成。
数组是最基本的构造类型,它是一组相同类型数据的有序集合。
数组中的元素在内存中连续存放,每个元素都属于同一种类型,用数组名和数组下标可以唯一地确定数组元素。
”
什么是结构化程序设计?
[1]
“结构化程序设计强调程序设计的风格和程序结构的规范化,提倡清晰的结构,其基本思路是将一个复杂问题的求解过程划分为若干阶段,每个阶段要处理的问题都容易被理解和处理。
包括自顶向下的方法对问题进行分析、模块化设计和结构化编码3个步骤。
自顶向下的分析方法,就是把大的问题分解成小问题后在解决。
面对一个复杂的问题,首先进行上层(整体)分析,按组织或功能将问题分解成子问题。
模块化设计时要遵循模块独立性的原则,即模块之间的联系应尽量简单。
体现在:
(1)一个模块只完成一个指定功能。
(2)模块之间只通过参数进行调用。
(3)一个模块只有一个入口和一个出口。
(4)模块内慎用全局变量。
模块化设计使程序结构清晰,易于理解和设计。
当程序出错时,只需改动相关的模块及其连接。
”
我认为结构化编码就是在符合语法规则的情况下使代码的排版更加整洁美观,代码的可读性更高,变量命名更加易懂。
个人对从大学生活的一些总结和今后的目标:
别的大学我不知道,但我们西大在大一给我的感觉像一锅慢慢加热的水,而我就是那只青蛙,就像泡温泉,自由舒适中夹杂者让人堕落的危险气息,一不留神就失去了跳出这种氛围的勇气,从前总向往一片自由的天空,现在给我了,但我有勇气接下来吗?
因为一不留意,没有认真的学习,挂了几科,加上这学期课程压力更大,总之我现在处在很危险的情形。
大学老师大多因该都不是专业师范学校毕业的,加上老师也要提交各种论文,压力比我们还大,每门课程排的课比高中少太多了,这些情况综合起来,就更加考验学生的自觉学习能力了。
不够自律肯定会挂科的。
有些课程比如数据结构,难度很大如果不预习不复习,整本书不过几遍,那跟没学有什么区别,100步半90就是这样。
知识更新传播的很快,如果不及时更新自己的知识体系,很快就会被淘汰。
我一直在想一个问题:
我为什么要学习,学计算机,为什么会不想学习,计算机技术能吸引到我,想做出一个很厉害的什么东西。
Stayfoolish,stayhungry。
除了为了满足生活的问题外。
还能追求更高的境界吗?
我认为“人类的所有的行为因该能让人们活的更加的正能量。
”包括学习,学业。
这就是我所追求的——人们因该过的更好。
活的更加简单。
参考文献
[1]何钦铭、颜晖.C语言程序设计[M].第3版.北京:
高等教育出版社,2017.