资源描述
- .
实 训 报 告
实训名称 C语言编程开发实训
专业班级 物联1541
姓 名 禄泽
学 号 1511431101
指导教师 黄标兵、王丽平
实训时间 2016.2.29~2016.3.11
成 绩 评 定
考核
容
平时
辩论
实训报告
综合
评定
成 绩
计算机技术与工程学院
- . 可修编.
?实训报告?文档规及考前须知
一、按照?任务书?中“实训报告要求〞模式写。
二、文档格式为A4纸、页边距上下2.54cm,左3.7cm,右2.7cm;正文通篇段落1.5倍行距,宋体五号;一级标题 4号黑体,二级标题小四黑体。
三、图、表应有标号和名称,且图名位于图下,表名位于表格上方;表格:表名用小五号黑体,表头用小五号黑体,表数字、字母用小五号Times New Roman体,表汉字用小五号宋体;表框线两端不封。图解:图名用小五号黑体。图表的大小要适中。
四、参考文献格式为:
序号 作者,书名,出版地:名称,年份
序号 作者.论文题名.期刊名称,年份,卷号〔期号〕:起至页码
五、附录中的源代码应有适当的注释〔可没有附录,但是提交的源代码电子文档中应有适当的注释〕。
六、按照格式要求填写?实训报告?封面中学生应填写的容。
七、实训完毕后,学生应提交的文档包括纸质文档和电子文档。
纸质文档包括:
1.?实训报告?1份〔左侧装订〕。
电子文档包括:
1.实训报告
2.源程序
3.程序的可执行文件〔.exe〕
专业资料
目 录
第1局部课程设计目的 1
第2局部课程设计容与要求2
2.1课程设计容6
2.2根本要求2
第3局部报告正文3
3.1 设计题目及任务要求3
3.2 总体设计 3
第4局部课程设计总结 22
第5局部参考文献 23
专业资料
第1局部 实训目的
C语言编程开发实训是学生在?C语言程序设计?课程完毕时进展的一项实践活动,综合运用C程序设计课程和其他先修课程的理论和知识,掌握C语言开发实训的一般方法,树立正确的设计思想,培养分析问题和解决实际问题的能力;学会从实际的要求出发,合理的选择算法,正确的使用测试方法,培养学生程序设计能力;学习运用帮助和查阅有关技术资料的能力。
针对实训题目对学生在整个实训阶段进展检查考核,主要包括考勤、阶段性检查、成果辩论和实训报告。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的时机,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的根底。
第2局部 实训容与要求
2.1实训容
C语言编程开发实.可实现信息的录入、浏览、修改、删除、可按学号、XX查询,学生信息必须包含学号,XX,年龄,性别,出生年月,地址,以文件的形式翻开。
2.2根本要求
〔1〕所有学生统一在机房进展设计,一人一组。
〔2〕听从指导教师的统一安排。
〔3〕严格遵守作息时间、不迟到、不早退,病、事假必须向指导教师请假。
〔4〕使用C语言开发。
〔5〕满足编程规。
〔6〕设计构造清晰〔模块化开发〕。
〔7〕根据任务书的要求选择实训题目,每个题目同一班级不超过三人选择,根据题目难易程度进展综合评分。学生也可以自选题目,但自选题目要满足实训题目要求并经指导教师确认。
〔8〕实训报告不合格者不允许参加辩论。
〔9〕抄袭他人程序者记零分。
〔10〕无故缺课累计超过该课程总学时数三分之一者记零分。
第3局部 报告正文
3.1 实训题目及任务要求
题目:学生信息管理系统设计
要求: 1.可实现信息的录入、浏览、修改、删除、可按学号、XX查询;
2.学生信息必须包含学号,XX,年龄,性别,出生年月,地址,。
3.以文件的形式翻开
4.必须有注释。
3.2 总体设计
开场
菜单
输入n的值进展选择
保存
完毕
是否继续进展
N
Y YY
5
添加学生信息
6
修改学生信息
2
浏览学生信息
3
查询学生信息
4
删除学生信息
7
退出
1
录入学生信息
详细设计
开场
输入信息
存入文件
继续?
完毕
信息录入流程图
开场
输入浏览选项
从文件中导出数据
输出数据
浏览流程图
完毕
信息查询界面,按1依照XX查询,按2依照学号查询。在文件数据中搜索后假设无查找容那么输出“搜索无结果〞,假设找到查找容,那么输出该容,返回主菜单。
开场
输入查询选项
选择查询类型
按学生XX查询 按学号查询
输入查找的学生XX
输入学好号
从文件中导出数据
从文件中导出数据
是否搜索到学生XX?
是否搜索学号?
输出搜索无结果
输出相应数据
输出相应数据
完毕
查询模块
信息查询流程图
删除模块
修改模块
图1.系统的总体流程图.
一、主界面
二、信息录入
三、信息浏览
四、信息查询
五、删除信息
六、信息添加
七、信息修改
源程序
#include <string.h>
#define N 100
struct student
{
int num;
char name[30];
char sex;
int age;
char xueyuan[30];
int bj;
char addr[30];
char tel[30];
}stu[100]; //定义一个构造体
void menu();
void input();
void save(int);
void display();
void del();
void add();
void search();
void search_num();
void search_xueyuan();
void search_tel();
void modify(); //定义各函数
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==1);
{
switch(n)
{
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(" ◆◆◆删除学生信息◆◆◆\n");printf("\n");del();break;
case 5:printf(" ◆◆◆添加学生信息◆◆◆\n");printf("\n");add();break;
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')
{
flag=1;
system("cls"); //清屏
menu(); //调用菜单函数
printf("请再次选择你需要操作的步骤(1--7):\n");
scanf("%d",&n);
printf("\n");
}
else
exit(0);
}
}
void menu() //菜单函数
{
printf(" ************欢送进入学生信息管理系统**********\n");
printf(" 1.录入学生信息");
printf(" 2.浏览学生信息\n");
printf(" 3.查询学生信息");
printf(" 4.删除学生信息\n");
printf(" 5.添加学生信息");
printf(" 6.修改学生信息\n");
printf(" 7.退出\n");
printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t制作人 侯迪");
printf("\n");
printf("\n");
}
void input() //录入函数
{
int i,m;
printf("请输入需要创立信息的学生人数(1--100):\n");
scanf("%d",&m);
for (i=0;i<m;i++)
{
printf("请输入学号: ");
scanf("%d",&stu[i].num);
printf("请输入XX: ");
scanf("%s",stu[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&stu[i].sex);
printf("请输入年龄: ");
scanf("%d",&stu[i].age);
printf("请输入学院: ");
scanf("%s",stu[i].xueyuan);
printf("请输入年级: ");
scanf("%d",&stu[i].bj);
printf("请输入住址: ");
scanf("%s",stu[i].addr);
printf("请输入: ");
scanf("%s",stu[i].tel);
printf("\n");
}
printf("\n创立完毕!\n");
save(m);
}
void save(int m) //保存文件函数
{
int i;
FILE*fp;
if ((fp=fopen("student_list","wb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
for (i=0;i<m;i++) //将存中学生的信息输出到磁盘文件中去
if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
int load() //导入函数
{
FILE*fp;
int i=0;
if((fp=fopen("student_list","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{
do
{
fread(&stu[i],sizeof(struct student),1,fp);
i++;
}
while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
void display() //浏览函数
{
int i;
int m=load();
printf(" 学号\t\tXX\t\t性别\t\t年龄 \n");
for(i=0;i<m;i++) //m为输入局部的学生人数
printf(" %d\t%s\t\t%c\t\t%d\t\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age);
printf(" 学院\t\t年级\t\t住址\t\t \n");
for(i=0;i<m;i++) //m为输入局部的学生人数
printf("\n %s\t%d\t\t%s\t\t%s\n",stu[i].xueyuan,stu[i].bj,stu[i].addr,stu[i].tel);
}
void del() //删除函数
{
int m=load();
int i,j,n,t,flag;
char name[20];
printf("\n 原来的学生信息:\n");
display();
printf("\n");
printf("请输入要删除的学生的XX:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(stu[i].name,name)==0)
{
printf("\n已找到此人,原始记录为:\n");
printf(" 学号\tXX\t\t性别\t\t年龄 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age);
printf("\n 学院\t\t班级\t\t住址\t\t \n");
printf("\n %s\t%d\t\t%s\t%s\n",stu[i].xueyuan,stu[i].bj,stu[i].addr,stu[i].tel);
printf("\n确实要删除此人信息请按1,不删除请按0\n");
scanf("%d",&n);
if(n==1)
{
for(j=i;j<m-1;j++)
{
strcpy(stu[j].name,stu[j+1].name);
stu[j].num=stu[j+1].num;
stu[j].sex=stu[j+1].sex;
stu[j].age=stu[j+1].age;
strcpy(stu[j].xueyuan,stu[j+1].xueyuan);
stu[j].bj=stu[j+1].bj;
strcpy(stu[j].addr,stu[j+1].addr);
strcpy(stu[j].tel,stu[j+1].tel);
}
flag=0;
}
}
}
if(!flag)
m=m-1;
else
printf("\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("请输入学生号: ");
scanf("%d",&stu[i].num);
printf("\n");
printf("请输入XX: ");
scanf("%s",stu[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&stu[i].sex);
printf("请输入年龄: ");
scanf("%d",&stu[i].age);
printf("请输入学院: ");
scanf("%s",stu[i].xueyuan);
printf("请输入年级: ");
scanf("%d",&stu[i].bj);
printf("请输入住址: ");
scanf("%s",stu[i].addr);
printf("请输入: ");
scanf("%s",stu[i].tel);
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; 按查询请按3; 进入主函数请按4\n");
scanf("%d",&t);
if(t>=1&&t<=4)
{
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_xueyuan();break;
case 3:printf("按查询\n");search_tel();break;
case 4: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==stu[i].num)
{
printf("\n已找到此人,其记录为:\n");
printf(" 学号\tXX\t\t性别\t\t年龄 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age);
printf("\n 学院\t\t年级\t\t住址\t\t \n");
printf("\n %s\t%d\t\t%s\t%s\n",stu[i].xueyuan,stu[i].bj,stu[i].addr,stu[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_xueyuan()
{
char xueyuan[30];
int i,t;
int m=load();
printf("请输入要查找的学院:\n");
scanf("%s",xueyuan);
for(i=0;i<m;i++)
if(strcmp(stu[i].xueyuan,xueyuan)==0)
{
printf("\n已找到,其记录为:\n");
printf(" 学号\tXX\t\t性别\t\t年龄 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age);
printf("\n 学院\t\t年级\t\t住址\t\t \n");
printf("\n %s\t%d\t\t%s\t%s\n",stu[i].xueyuan,stu[i].bj,stu[i].addr,stu[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_tel()
{
char tel[20];
int i, t;
int m=load();
printf("请输入要查找的:\n");
scanf("%s",tel);
for(i=0;i<m;i++)
if(strcmp(tel,stu[i].tel)==0)
{
printf("\n已找到,其记录为:\n");
printf(" 学号\tXX\t\t性别\t\t年龄 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age);
printf("\n 学院\t\t年级\t\t住址\t\t \n");
printf("\n %s\t%d\t\t%s\t%s\n",stu[i].xueyuan,stu[i].bj,stu[i].addr,stu[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 modify() //修改函数
{
int num;
char name[20];
char sex;
int age;
char xueyuan[30];
int bj;
char addr[30];
char tel[20];
int b,c,i,n,t,flag;
int m=load();
printf("\n 原来的学生信息:\n");
display();
printf("\n");
printf("请输入要修改的学生的XX:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(stu[i].name,name)==0)
{
printf("\n已找到,其记录为:\n");
printf(" 学号\tXX\t\t性别\t\t年龄 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age);
printf("\n 学院\t\t年级\t\t住址\t\t \n");
printf("\n %s\t%d\t\t%s\t%s\n",stu[i].xueyuan,stu[i].bj,stu[i].addr,stu[i].tel);
printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");
scanf("%d",&n);
if(n==1)
{
printf("\n需要进展修改的选项\n 1.学号 2.XX 3.性别 4.年龄 5.学院 6.年级 7.住址 8.\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);
stu[i-1].num=num;
break;
case 2:printf("XX改为: ");
scanf("%s",name);
strcpy(stu[i-1].name,name);
break;
case 3:printf("性别改为: ");
getchar();
scanf("%c",&sex);
stu[i-1].sex=sex;
break;
case 4:printf("年龄改为: ");
scanf("%d",&age);
stu[i-1].age=age;
break;
case 5:printf("学院改为: ");
scanf("%s",xueyuan);
strcpy(stu[i-1].xueyuan,xueyuan);
break;
case 6:printf("年级改为: ");
scanf("%d",bj);
break;
case 7:printf("住址改为: ");
scanf("%s",addr);
strcpy(stu[i-1].addr,addr);
break;
case 8:printf("改为: ");
scanf("%s",tel);
strcpy(stu[i-1].tel,tel);
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;
}
}
#include <stdio.h>
#include <windows.h>
第4局部 实训总结
使用正文格式来书写,从自我收获、实训中遇到的问题及其解决方法等方面进展总结,不少于500字。
实习的题目也不算太难,思路很清晰,总共三步走:1.读取文件;2.录入文件;3.保存文件。原以为会很轻松,但还是遇到很多问题,以前上课时从未想到过。
经历过根本一天都在看程序的时间,我发现我懂的太少,要学的太多。对文件的操作我一直都没注意,现在才发现其乐无穷;以前觉得很难,现在轻松写出程序。学习与实践果然是不可分割的。
实习中,大家八仙过海各显神通,有的用数组,这也可以理解,方便使用,排序便利;有的直接用文件C语句查询、删除,让我大开眼界,文件还能这么用!在写报告时看到一篇用指针数组做的程序,相当有意思。
发现水平还是不够,同学可以用C语言编出一个比拟漂亮的界面,还可以随意调用文件操作,实在让人赞叹不已。
此次实习加强了我对c语言的理解,很多以前迷糊的概念得到了明确,亦让我感到C语言强大之处,直接操作存,实在很暴力。
一句诗概括此次实习,“山重水复疑无路,柳暗花明又一村〞;如今C语言实习已然完毕,但是对于计算机语言的学习决不能放松,“雄关漫道真如铁, 而今迈步从头越〞。现在的世界是信息化的,我们现在对于Matlab的要求也很大,C语言也是其根底。
路漫漫其修远兮,吾将上下而求索。
感谢教师们这几天的指导。
第5局部 参考文献
1.谭浩强著 ?C语言程序设计? 2005年7月第3版
wenku.baidu./view/4be08c81e53a580216fcfefb.html 吴煌坚学长时间报告
专业资料
展开阅读全文