高级语言程序设计报告Word下载.docx
《高级语言程序设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计报告Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
//从磁盘读入到内存
voidsort(structstus[],intn);
//按卷面分数排序
voidmodify(structstus[],intn);
//按学号修改记录信息
intmenu();
//菜单函数
【模块流程图】
main函数
【程序使用方法】
(1)执行程序,按照界面提示进行选择。
输入“1”,进入信息录入。
(2)按照程序提示,先选择要录入信息人的个数,具体信息分别为:
学号、姓名、出生日期、性别、民族、院系、专业、省份、卷面分数、加分。
(3)输入成功后,自动返回主界面。
输入“2”,显示录入所有信息记录,程序自动将总分也输出到屏幕上。
(4)自动返回主界面。
输入“4”,将记录的信息保存到磁盘中,按照提示进行输入。
(5)输入成功后自动返回主界面。
输入“5”,将磁盘文件中的记录信息读入到内存中,按照提示进行输入。
(6)输入“6”,对已保存文件信息根据卷面分数排序。
(7)输入“7”,进入信息修改,按提示操作。
(8)输入“8”,退出程序。
2、程序上机调试报告
【语法错误及其排除】
1、主函数之前应该输入各自定义函数的声明。
2、宏定义时在末尾处加上了分号,应该不加分号。
3、对字符数组进行比较和赋值时用了“==”号。
【算法错误及其排除】
1、调用exit(0)时必须有#include"
stdlib.h"
做头文件。
3、程序测试结果
【测试数据】
2010张三91/01/06女汉理学院数学内蒙5050
2011小李92/10/18男汉理学院数学吉林5100
【输出结果】
~(^o^)~欢迎使用~(^o^)~
菜单
**********************
1.输入个人信息
2.显示记录
3.按姓名查找
4.记录到磁盘
5.保存到文件
6.排名情况
7.修改个人信息
8.退出
请选择<
1--8>
:
1
请输入记录个数:
2
***请输入记录数据***
学号:
2010
姓名:
张三
出生日期:
91/01/06
性别:
女
民族:
汉
院系:
理学院
专业:
数学
省份:
内蒙
卷面分数:
505
加分:
2011
小李
92/10/18
男
吉林
510
:
学生信息
**********************************************************************
|学号|姓名|出生日期|性别|民族|院系|专业|省份|卷面成绩|加分|总分|
|---------|---------|---------------|---------|---------|---------|---------|-------|------------|-------|------|
|2010|张三|91/01/06|女|汉|理学院|数学|内蒙|505|0|505|
|2012|小李|92/10/18|男|汉|理学院|数学|吉林|510|0|510|
3
请输入要查找姓名:
找到的记录信息
************************************************************************
************************************end*********************************
4
输入文件名格式信息<
例如e:
\\file.tex>
e:
\\file.tex
-----------保存成功!
!
------------
5
输入文件名<
------已成功读入数据!
-----
6
排序成功!
7
请输入要修改学号记录:
修改学号(y/n)?
n
修改姓名(y/n)?
修改出生日期(y/n)?
y
输入出生日期:
92/09/23
修改性别(y/n)?
修改民族(y/n)?
修改院系(y/n)?
修改专业(y/n)?
修改省份(y/n)?
修改卷面分数(y/n)?
修改加分(y/n)?
8
O(∩_∩)O谢谢使用O(∩_∩)O
Pressanykeytocontinue
【收获及体会】
任务书的设计想了很久,根据自己理解到的内容只能想到输入、查询、修改、排序还有读写文件。
对自己的这个程序比较满意,基本上把自己学到的知识全部用到了。
因为之前只编写过简单的函数和程序,所以在编写开始时无从下手。
于是在图书馆看了很多程序设计的书及例题,才豁然开朗。
不过真正编写还是有些困难重重,尤其是无法将信息写入文件或者写入文件的是一堆乱码,这个问题困扰了我很久!
最后通过自己的认真检查、调试和查阅资料,终于皇天不负有心人。
从编写这个程序的过程中不但发现了许多自己没有学明白的地方,而且有助于期末考试的复习,很珍惜这次编写程序的过程。
4、源程序代码
#defineNULL0
#defineM100//数组元素个数
/*程序中用到的头文件*/
#include"
stdio.h"
//输入输出函数
string.h"
//字符和字符串的函数
//动态分配函数和随机函数
structstu//定义结构体类型
{
charno[10];
//学号
charname[10];
//姓名
charbirthday[10];
//出生日期
charsex[3];
//性别
charnation[10];
//名族
chardepartment[20];
//院系
charmajor[20];
//专业
charprovince[20];
//省份
intscore;
//卷面成绩
intadd;
//加分
inttotal;
//高考总分=卷面成绩+加分
};
/*函数声明*/
//保存记录到文件
//从文件中读记录
/*主函数*/
voidmain()
structstustudent[M];
//定义结构体数组
intlength;
//保存记录个数
for(;
;
)//无限循环
switch(menu())//调用主菜单函数,返回值为整数,作为语句的条件
{
case1:
length=enter(student);
break;
case2:
print(student,length);
//显示全部记录
case3:
search(student,length);
//查找记录
case4:
save(student,length);
//记录到磁盘
case5:
length=load(student);
//保存到文件
case6:
sort(student,length);
//排序
case7:
modify(student,length);
//修改记录信息
case8:
return;
//如果菜单返回值为8,则程序结束
}
}
/*菜单函数,返回值为整型数*/
intmenu()
intchoice;
printf("
~(^o^)~欢迎使用~(^o^)~\n"
);
菜单\n"
**************************\n"
1.输入个人信息\n"
2.显示记录\n"
3.按姓名查找\n"
4.记录到磁盘\n"
//将记录信息保存到磁盘文件中
5.保存到文件\n"
//将磁盘文件张的记录信息读入到内存中
6.排名情况\n"
7.修改个人信息\n"
8.退出\n"
//退出
do
printf("
\n请选择<
"
scanf("
%d"
&
choice);
//以整型数的形式保存选择号
\n"
while(choice<
1||choice>
8);
//选择项不在1--8之间,请重新选择
if(choice==8)
O(∩_∩)O谢谢使用O(∩_∩)O\n\n"
"
returnchoice;
//返回选择项,主程序根据该返回值调用相应的函数
/*输入记录,返回值为记录长度*/
intenter(structstus[])
inti,n;
//n用来存放记录的个数
\n请输入记录个数:
scanf("
n);
//输入记录个数
\n***请输入数据***\n"
for(i=0;
i<
n;
i++)
do//输入学号并检验
{printf("
学号:
//显示提示信息
%s"
s[i].no);
//输入学号
if(strlen(s[i].no)>
10)//进行长度检验,超过10个字符,请重新输入
printf("
\n请重新输入!
}
while(strlen(s[i].no)>
10);
do//输入姓名并检验
{
printf("
姓名:
scanf("
s[i].name);
if(strlen(s[i].name)>
10)
\n请重新输入\n"
}while(strlen(s[i].name)>
出生日期(91/01/01):
//提示输入出生日期
s[i].birthday);
//输入出生日期
性别:
s[i].sex);
//输入性别
民族:
s[i].nation);
//输入民族
院系:
s[i].department);
//输入院系
专业:
s[i].major);
//输入专业
省份:
s[i].province);
//输入省份
do//输入卷面分数并检验
卷面分数:
s[i].score);
if(s[i].score<
0||s[i].score>
750)
无效数据!
请重新输入\n"
//进行校验
while(s[i].score<
750);
加分:
s[i].add);
//输入加分
s[i].total=s[i].score+s[i].add;
//计算高考总分
returnn;
/*显示记录信息*/
voidprint(structstus[],intn)
inti;
学生信息"
\n*************************************************************************\n"
|学号|姓名|出生日期|性别|民族|院系|专业|省份|卷面成绩|加分|总分|\n"
|------|------|--------|----|----|------|------|------|--------|----|----|\n"
|%-6s|%-6s|%-8s|%-4s|%-4s|"
s[i].no,s[i].name,s[i].birthday,s[i].sex,s[i].nation);
%-6s|%-6s|%-6s|%8d|%4d|%4d|\n"
s[i].department,s[i].major,s[i].province,s[i].score,s[i].add,s[i].total);
*************************************************************************\n"
getchar();
/*按姓名查找记录信息*/
voidsearch(structstus[],intn)
//存放姓名的字符数组
请输入要查找姓名:
name);
//输入待查找的姓名
i++)//查找从第一条记录开始,直到最后一条记录为止
if(strcmp(name,s[i].name)==0)
\n找到的记录信息"
\n**************************************************************************\n"
|%-6s|%-6s|%-8s|%-4s|%-4s|%-6s|%-6s|%-6s|%8d|%4d|%4d|\n"
s[i].no,s[i].name,s[i].birthday,s[i].sex,s[i].nation,
s[i].department,s[i].major,s[i].province,s[i].score,s[i].add,s[i].total);
*********************************end**************************************\n"
if(i>
n)//i>
n-1,说明没有找到
\n没有该学生信息\"
%s\"
student\n"
//显示没有该学生
/*将记录信息保存到磁盘文件中*/
voidsave(structstus[],intn)
voidmain();
//对主函数进行声明
FILE*fp;
//定义指向文件的指针
charoutfile[20];
//保存输出文件名
输入文件名格式信息(例如e:
\\file.tex):
outfile);
if((fp=fopen(outfile,"
wb"
))==NULL)//为输出打开一个二进制文件,如果没有则建立