信息管理与信息系统专业实习
防灾科技学院
实习报告书
实习题目: 信息管理与信息系统认识实习(C语言)
135041310 ...... 学号: 姓名:
专业: 信息管理与信息系统 系别: 灾害信息工程系
2014/9/6-9/13 6#1006 实习时间: 实习地点: 指导教师: 刘颖
考勤成绩: 实习态度:
任务完成: 实习报告:
实习日志: 实习总成绩
指导
教师
评语 指导教师(签名):
年 月 日
防灾科技学院 灾害信息工程系
2014年制
实习目的:(各部分内容中,中文用宋体、小四号字书写;英文和数字一律用Times New Roman书写。行距均为1.5倍,左右无缩进,首行缩进2个字符,红字部分在报告完成时都要删除)
通过该课程,使学生初步了解本专业毕业生能够从事的工作单位性质及工作岗位;了解不同岗位对专业知识及能力的要求;了解不同单位信息化建设的现状;熟练掌握C语言程序
方法,能应用C语言编程解决实际问题。
通过本课程的学习,使学生进一步明确学习目标、增强学习动力、培养学习兴趣,为后继专业课程的学习打下坚实的基础。
实习任务概述:
任务一:电子通讯录管理系统的设计与实现
其中主要完成以下任务:
1. 对电子通讯录管理系统的需求分析
2. 电子通讯录管理系统的总体设计
3. 电子通讯录管理系统的详细设计
4. 电子通讯录管理系统的实现
5. 电子通讯录管理系统的测试
任务二:学生成绩管理系统的设计与实现
其中主要完成以下任务:
1. 对学生成绩管理系统的需求分析
2. 学生成绩管理系统的总体设计
3. 学生成绩管理系统的详细设计
4. 学生成绩管理系统的实现
5. 学生成绩管理系统的测试
实习所用软件简介:
Visual C++ 6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C++.NET(Visual C++7.0),但它的应用有很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C++6.0为平台。
实习内容及步骤:
任务一:电子通讯录管理系统的设计与实现
1
1 系统需求分析
(1)文件操作:从给定的文件中读取联系人的信息。
(2)显示联系人的信息:用户可以了解联系人的详细信息,可以显示某个联系人信息,也可以显示全部联系人信息。
(3)查询操作:可按姓名精确查询联系人的信息。
(4)添加操作:当有新的联系人需要添加时,可以加入到电子通讯录中,便于管理。 (5)删除操作:当联系人的信息不再需要了,可以从电子通讯录中删除,删除时候需要给用户“确认删除”的提示语据。
(6)排序操作:对联系人按姓名排序,是按照联系人姓名的拼音字母顺序对联系人进行排序。 (7)简单的操作界面:用户进入系统后,对其有哪些功能一目了然,节约用户时间,方便用户的使用。
2 系统环境要求
编译环境:Visual C++6.0
操作系统:Windows XP
客户端:Windows 95/98/me/Xp/2000/2003, Unix, Linux,Vista,Mac OS各版
3 系统功能及模块图
该系统由以下几个模块构成:用户界面模块,用户操作模块,文件操作模块;用户操作界面包括添加联系人,删除联系人,查询联系人,修改联系人,对联系人进行排序等功能;文件操作包括文件读和文件写等功能。
2
修改联系人资料
查看所有联系人
用户界面板块
删除联系人
用户操作模块 查询联系人 电子通讯录
添加联系人
文件操作模块
保存
退出
4 系统详细设计
4.1 系统数据结构
在通讯录管理系统里,最主要的数据信息就是联系人信息,由多个基本类型构成,因此我们选
择结构体数据类型。联系人:(编号,联系人姓名,电子邮件,地址,联系人电话)。这样有利于添
加联系人、修改联系人、删除联系人等操作。
#define N 100 //假定联系人数据总量为100
int i=1;
struct records
{
char name[20]; //联系人姓名
char email[30]; //联系人电子邮箱
char homeaddr[60]; //联系人地址
char telephone[13]; //联系人电话
3
}records[N]={"","",""},h;
4.2 主要函数设计
为了实现电子通讯录具有多种功能,我们需要多种调用函数如下: void Data_Up(); //把文件数据存入内存 void Order(); //对联系人进行姓名排序 void Data_Show(int a); //显示联系人资料 void Add_People(char name[20]); //添加联系人 int Search_Name(char namestr[20]); //查找联系人 void DeletePeo(); //删除联系人 void Change(char name[20]); //修改联系人资料 void Data_Save(); //对数据进行保存 void Data_Write(); //写文件
4.3 系统主要流程图
开始菜单
选择操作
查添保修退查删
询加存 改出 看除
联联联所联
结束 系系系有系
人 人 人联人
资系
料 人
图4.1 系统主流程图
4
5 系统实现
5.1 主界面的实现
代码如下:主要是用来启动程序,触发其他函数。显示主菜单,给用户以选择,方便使用。 void main() //主函数
{
int ch,m,n;
char tp,nametemp[20];
system("color F9");
printf("\t\t??????????电子通讯录??????????\n");
printf("\t\t\t \n");
printf("\t\t----------------请选择您需要的操作----------------\n");
printf("\t\t\t===1-> 修改联系人资料\n\t\t\t===2-> 查看所有的联系人\n\t\t\t===3-> 删除联系人\n\t\t\t===4-> 查询联系人\n\t\t\t===5-> 添加联系人\n\t\t\t===6-> 保存\n\t\t\t===7-> 退出\n\n");
printf("(=^T^=) (=^T^=) (=^T^=) (=^T^=) (=^T^=) (=^T^=) (=^T^=)
(=^T^=)\n");//将文件放在中间,方便看
scanf("%d",&ch);
while(ch!=7)//进行操作选择
{
switch(ch)
{
case 1:printf("请输入要修改的联系人姓名:");scanf("%s",nametemp);Change(nametemp);break;
case 2:printf("\t\t\t联系人资料\n");
printf("姓名\t\t电子邮箱\t家庭地址\t电话\n");
for(m=0; m<=i; m++)
{
Data_Show(m);
}break;//显示已有联系人资料
case 3:DeletePeo();break;
case 4:printf("请输入你要查询的人的姓名:");
5
scanf("%s",nametemp);n=Search_Name(nametemp);
if(n>=i)
{
printf("没有您要找的联系人~\n");
}
else
{
printf("\t\t\t联系人资料\n");
printf("姓名\t\t电子邮箱\t家庭地址\t电话\n");
Data_Show(n);
}break;
case 5:printf("请输入待添加的联系人的姓名:");
scanf("%s",nametemp);Add_People(nametemp);break;
case 6:printf("保存数据吗,确定按8键,否则按任意键选择其他操作~\n");
scanf("%d",&tp);
if(tp==8)
{
Data_Save();
}break;//将数据保存入文本文件
case 7:return;
}
printf("\n");
printf("\t\t\t------------请选择您需要的操作-------------\n");
printf("\t\t\t \n");
printf("\t\t\t=========1->修改联系人资料;\n\t\t\t=========2->查看所有的联系
人;\n\t\t\t=========3->删除联系人;\n\t\t\t=========4->查询联系人;\n\t\t\t=========5->添加联系
人;\n\t\t\t=========6->保存;\n\t\t\t=========7->退出\n\n");
printf("(=^T^=) (=^T^=) (=^T^=) (=^T^=) (=^T^=) (=^T^=) (=^T^=)
(=^T^=)\n");//将文件放在中间,方便看
scanf("%d",&ch);
}
6
}
图5.1 主界面的实现 5.2 修改联系人资料操作的实现
void Change(char name[20])//修改联系人资料 {
int n,m;
char string[60];
n=Search_Name(name);
if(n>i)
{
printf("您要修改的联系人不存在~\n");
return;
}
printf("\t\t\t该联系人资料\n");
printf("姓名\t\t电子邮箱\t家庭地址\t电话\n");
Data_Show(n);
printf("请选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮箱;\n3->修改联系人
地址;\n4->修改联系人电话;\n5->退出~\n\n");
scanf("%d",&m);
while(m!=5)
{
switch(m)
{
case 1:printf("请输入新的姓名:");scanf("%s",string);strcpy(records[n].name,string);break;//替换
case 2:printf("请输入新的电子邮箱:");scanf("%s",string);strcpy(records[n].email,string);break;//
7
替换
case 3:printf("请输入新的地址:");scanf("%s",string);strcpy(records[n].homeaddr,string);break;//
替换
case 4:printf("请输入新的电话:");scanf("%s",string);strcpy(records[n].telephone,string);break;//
替换
case 5:return;
}
printf (" 请继续选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮箱;\n3->修改联系人地址;\n4-> 修改联系人电话;\n5->退出~\n\n");
scanf("%d",&m);
}
}
图 5.2 修改联系人操作的实现
5.3查询所有联系人操作的实现
8
代码如下:主要是对已有联系人进行全部查看,并用排序的方式打印出来,更加易于查询。
void Order()//对联系人进行姓名排序
{
int j,k;
for(j=0; j
0)
{
h=records[j];
records[j]=records[k];
records[k]=h;
}
}
}
void Data_Show(int a)//显示联系人资料
{
void Order();
printf("%-16s%-16s%-16s%s\n",records[a].name,records[a].email,records[a].homeaddr,records[a].tele
phone);
}
9
图 5.3查看所有联系人操作的实现
5.4删除联系人操作的实现
代码如下:主要是用作信息删除。 void DeletePeo()//删除联系人
{
char nametemp[20];
int tp,n;
if(i<0)
{
printf("\n没有可删除的联系人\n");
return;
}
printf("请输入您要删除的联系人的姓名:");
scanf("%s",nametemp);
n=Search_Name(nametemp);
if(n>i)
{
printf("无此人~\n");
printf("\n");
return;
10
}
printf("\t\t\t该联系人资料\n");
printf("姓名\t\t电子邮箱\t家庭地址\t电话\n");
Data_Show(n);
printf("确定要删除吗,确认按1,否则按任意键返回上一级菜单~\n");
scanf("%d",&tp);
if(tp==1)
{
int j;
for(j=n+1; j<=i; j++)//删除就是将该位置后的联系人数据都依次向前移一位,起覆盖作用
{
strcpy(records[j-1].name,records[j].name);
strcpy(records[j-1].email,records[j].email);
strcpy(records[j-1].homeaddr,records[j].homeaddr);
strcpy(records[j-1].telephone,records[j].telephone);
}
i--;
}
else return;
}
11
图 5.4 删除联系人和联系人不存在时操作的实现 5.5查询联系人操作的实现
代码如下:主要可以帮助用户实现精确查找到想要搜索的联系人的信息。 int Search_Name(char namestr[20])//查找联系人
{
int j;//不考虑同名的人
for(j=0; j<=i; j++)
{
if(strcmp(namestr,records[j].name)==0) break;//确定是否存在联系人
}
return j;//返回联系人在数组中的下标
}
图 5.5查询联系人和联系人不存在时操作的实现 5.6添加联系人操作的实现
12
代码如下:主要是为了再有新联系人时,可以方便添加。 void Add_People(char name[20])//添加联系人
{
int n,j;
for( j=0; j0) break;//确定所添加的联系人插入的位置
for(n=i; n>=j; n--)//将插入位置后的联系人数据依次向后移一位
{
strcpy(records[n+1].name,records[n].name);
strcpy(records[n+1].email,records[n].email);
strcpy(records[n+1].homeaddr,records[n].homeaddr);
strcpy(records[n+1].telephone,records[n].telephone);
}
i++;
strcpy(records[j].name,name);//输入联系人的资料
printf("\n请输入联系人的电子邮箱:");
scanf("%s",records[j].email);
printf("\n请输入联系人的家庭地址:");
scanf("%s",records[j].homeaddr);
printf("\n请输入联系人的电话:");
scanf("%s",records[j].telephone);
printf("添加成功~\n");
printf("添加的联系人信息为:%d,%s",j,records[j].name); }
13
图 5.6 添加联系人操作的实现 5.7保存操作的实现
代码如下:在进行修改联系人、添加联系人等操作后,对新的联系人数据进行保存,以便下次
打开时用的是最新数据
void Data_Write() //写文件
{
int y;
FILE *fp;
fp=fopen("record.txt","wt+");
for(y=0;y<=i;y++)
{
fprintf(fp,"%s %s %s %s\n",records[y].name,records[y].email,records[y].homeaddr,records[y].telepho
ne);
}
fprintf(fp,"%s","stop");
fclose(fp); //防止文件读写不正常 }
void Data_Save()//对数据进行保存
14
{
int j;
FILE *fp;
fp=fopen("record.txt","wt+");//对文本文件进行读写
for(j=0; j<=i; j++)
{
fprintf(fp,"%s %s %s %s\n",records[j].name,records[j].email,records[j].homeaddr,records[j].telephone)
;
}//写入文件
fprintf(fp,"%s","stop");//以stop为结尾来确保下次正确能打开
fclose(fp);
}
图 5.7.1 保存联系人操作的实现
图5.7.2 保存后自动生成的文本
任务二:学生成绩管理系统的设计与实现
1 系统需求分析
15
现在学校里的学生越来越多,老师的压力也就越来越大。学生每次的成绩管理,排名等等都是
一件很麻烦的事情,工作量非常的大。因此需要一个程序,来减轻他们的负担,方便他们工作。
1.文件操作:保存和读取
2.简易提醒的操作菜单
3.添加、查询、修改、删除的功能
4.查看所有的成绩
5.排序功能,可以按各种需求来对成绩进行排序 2 系统环境要求
编译环境:Visual C++6.0
操作系统:Windows XP
客户端:Windows 95/98/me/Xp/2000/2003, Unix, Linux,Vista,Mac OS各版
3 系统功能及模块图
(1)文件操作
1) 系统退出时,把数据保存到文件中。
2) 再次登陆的时候从文件中读取数据。
(2)实现简易的提示菜单界面,便于操作使用。 (3)录入数据:首次登录系统,数据从键盘录入得到。 (4)增加数据:增加学生记录。
(5)浏览数据:
1) 浏览全部信息;
2) 浏览某个给定的记录信息;
(6)查询操作:
1)按学号查询;
2)按姓名查询;
3)查询成功给出查询结果,查询失败给出提示信息; (7)删除操作:查询待删除的记录,给出删除确认提示,删除之后进行文件存储操作。
16
(8)修改操作:按照一定方式修改记录的各个属性,给出确认修改操作,修改之后进行文件存储操作
(9)排序操作:按照成绩对记录进行升序或降序排序。
手动输入
输入模块
文件导入
更新模块
按学号查询
查询模块
按姓名查询 成
绩添加模块
管 按单门成绩排序 理
系删除模块
统 按平均成绩排序
排序模块
按总成绩排序
文件模块
系统登陆界面
用户界面模块 管理员界面
普通用户界面 4 系统详细设计
4.1 系统数据结构
为了将学生成绩完整的存储一起,因为由多种基本类型构成,因此我们用结构体来完成这个数
据类型。结构体的内容有:学号,姓名,成绩1,成绩2,成绩3,总成绩,平均成绩。
代码如下:
#define N 50
int i=0;
17
struct
{
char num[8]; //学号
char name[10]; //姓名
int score[5]; //分数
}student[N],stutemp;
4.2 主要函数设计
为了使学生成绩管理方便,我们需要多种函数来实现这个系统的功能: void Manager(); //管理员操作界面 void User(); //普通用户操作界面 void Input_Data(); //手动输入操作 void xue(); //普通用户登录时以只读方式打开成绩文件
void Up_Data(); //读取硬盘文件 void Count_Score(); //计算平均成绩和总成绩 void Print_Data(int n); //显示学生信息 void Search_Infor(); //查找学生信息 int Search_Num(); //按学号查找学生信息 int Search_Name(); //按姓名查找联系人信息 void Sort_Data(); //按成绩排序操作 void Delete_Data(); //删除信息操作 void Insert_Data(); //添加学生信息 void Modify_Data(); //修改信息操作 void Save_Data(); //保存信息操作 void Login_MFace(); //进入登陆界面 int Password(); //管理员登录时的密码验证
4.3 系统主要流程图
18
学号 开始
录入选1 数 据 姓名
登录
界 面 单 科
成 绩
更新
选2 数 据 管
理
按学号 员
操查询选3 选1 数 据 作
按姓名 界
面
添加选4 数 据
删除选5 数 据
按单科
成绩排序 选6 排 序 按总分
保存选7 数 据
选0 退出
按学号 查询选1 普成 绩 按姓名 通
用
选2 户成绩按单科选2 排 序 登排序排
按总分 录序
界退出 选0 面
选3 结束
5 系统实现
19
5.1主界面的实现
代码如下:
void main()
{
int n;
system("color F9");
printf("\t\t\t欢迎使用成绩管理系统\n");
printf("\t\t\t====================");
printf("\n请选择用户身份:\n1->管理员登录\n2->普通用户登录\n3->退出\n");
scanf("%d",&n);
while(n!=3)
{
if(n==1)
{
Password();
}
if(n==2)
{User();break;}
if(n!=1&&n!=2)printf("\n\n选择错误,请重新输入~");
printf("\n\t欢迎使用成绩管理系统\n请选择用户身份:\n1->管理员登录\n2->普通用户登录\n3->退
出\n");
scanf("%d",&n);
}
}
5.2管理员界面
代码如下:
20
int Password()
{
char pw[50];
char * syspw="abc";
int i=0;
printf("请输入密码:\n");
while(i<3)
{
scanf("%s",pw);
if(strcmp(pw,syspw)!=0)
{
printf("密码错误,请重新输入!\n");
i++;
}
else
{
printf("密码正确~\n");
system("pause");
Manager();
}
}
printf("连续3次输入错误,退出~\n");
system("pause");
return 0;
}
void Manager()
{
int j,n,m;
getchar();
printf("\n\n请选择数据输入方式:\n1->手动输入\n2->文件导入\n");
scanf("%d",&n);
21
if(n==1)Input_Data();
if(n==2)Up_Data();
if(n!=1&&n!=2) Manager();
Count_Score();
Login_MFace();
scanf("%d",&m);
while(m!=0)
{
switch(m)
{
case 0:return;
case 1:for(j=0; j 退出\n1-> 显示全部学生信息\n2-> 查询信息\n3-> 按程序排序\n4-> 修改信息
22
\n5-> 删除信息\n6-> 添加信息\n7-> 保存信息\n");
printf("=======================================================================
=========\n");
}
5.3手动输入操作的实现
录入学生成绩。代码如下:
void Input_Data() //手动输入学生成绩 {
int a,b,j,pd1;
Up_Data();
for(a=i; a=0)break;
printf("输入错误,请重新输入:");
}
printf("\n请输入学生成绩:");
for(b=0;b<100;b++)
{
scanf("%d",&student[a].score[1]);
if(student[a].score[1]<=100&&student[a].score[1]>=0)break;
printf("输入错误,请重新输入:");
}
printf("\n请输入学生英语成绩:");
for(b=0;b<100;b++)
{
scanf("%d",&student[a].score[2]);
if(student[a].score[2]<=100&&student[a].score[2]>=0)break;
printf("输入错误,请重新输入:");
}
i++;
Count_Score();
Save_Data();
printf("\n是否继续输入,取消按1,按其他键继续输入~");
scanf("%d",&pd1);
if(pd1==1) break;
24
}
}
实习日程安排:
时间 实习内容
选题,对第一个选题进行功能需求分析、功能结构图
2014.9.6
和流程图的设计、系统架构设计
核心算法设计,程序设计及编码,逐步完善建立数据
2014.9.7-9.8 文件,增加数据,修改数据,查询数据,删除数据,
对数据排序和屏幕显示数据等功能
2014.9.9 代码调试、测试
对第二个选题进行功能需求分析、功能结构图和流程
2014.9.10
图的设计、系统架构设计
2014.9.11-9.12 核心算法设计,程序设计及编码等。
2014.9.13 代码调试、测试;编写实习报告; 实习体会:(300字左右)
25