公司通讯录制作(通用6篇)
篇1:公司通讯录制作
浙江大学城市学院实验报告
课程名称
数据结构
实验项目名称
实验三
线性表的应用---通讯录管理系统的设计与实现
实验成绩
指导老师(签名)
日期
一.实验目的和要求
1、掌握线性表的顺序存储结构;
2、掌握线性表的动态分配顺序存储结构及基本操作的实现;
3、掌握线性表的链式存储结构;
4、掌握单链表的基本操作的实现。
5、掌握线性表的应用。
二.实验内容
1、设计并实现日常生活中通讯录的管理系统。该系统需3位同学一组,按模块分工协作完成,系统具体功能需求描述如下:
① 输入数据建立通讯录表:在系统使用前先需要创建通讯录,可以一次输入(或文件导入)多个成员的通讯录信息,建立通讯录。要求此表为顺序存储结构。② 查看所有通讯录信息:显示通讯录表中所有成员的通讯录信息。
③ 查询通讯录中满足要求的信息:可以根据不同方式查询,如按姓名查询、按姓氏查询、按编号查询等。
④ 新增通讯录信息:每次可添加一个新成员的通讯录信息。⑤ 修改通讯录信息:修改通讯录中已有成员的信息。
⑥ 删除通讯录成员:删除通讯录表中已有的成员,但需要把删除的成员信息放到另一张被删成员表中,以便错误操作后允许恢复。该被删成员表要求采用链式存储。
⑦恢复被删成员信息:一旦发现误删,则可以在被删成员表中找到该成员,重新加入到通讯录表中。
系统实现要求:
① 通讯录表必须使用动态分配顺序存储结构,被删成员表必须使用链式存储结构。
②通讯录信息至少包括:编号、姓名、电话
1、电话
2、邮箱、......等,其他可自行设置。
③用菜单方式选择相应功能,且各功能的有关操作需通过调用各函数来实现,如:初始化通讯录表用函数void InitAddressBook(SqList &TXL)、浏览所有通讯录成员函数 BrowseAddressBook(SqList TSL)等等,这些操作因针对通讯录原始表,属于顺序结构,故可将这些子函数放在头文件test3_Seq.h中。针对被删成员表的操作,由于是链式存储结构,故针对此表的相关操作课定义在test3_link.h中。
③ 建立主函数文件test3.cpp,通过调用上述头文件中的函数来实现该系统。④ 给出系统数据类型的定义、存储结构定义以及各个函数之间的调用关系。⑤ 实验内容中设置的功能要求必须实现,此外可自行增加合适的功能,可作为额外的实验成绩进行加分: 例如:
通讯录和被删成员数据可用文件保存,程序运行时可从文件读入相应数据,程序结束时可写入文件保存。
通讯录分组,可自行考虑把通讯录成员进行分组,如同学组、亲戚组、同事组等。
2、以小组为单位认真填写实验报告,实验报告必须包括各类数据类型的结构定义说明,各类数据的组织方式,系统的功能结构,各个操作的定义以及实现方法,运行结果与分析,难点如何解决,存在问题以及可改进之处等。同时,在实验报告中需写明小组每位同学的分工,得分(小组总分不超过12分)等。实验报告文件取名为report3.doc。每组还必须制作一个答辩PPT,该PPT的命名为PPT_通讯录管理系统_(各小组成员名字).PPT。
3、每位组长上传实验报告文件report3.doc、源程序文件test3.cpp及test3_Seq.h、test3_Link.h,以及答辩PPT压缩打包后到BB平台上。
难点与解决:
1.实参形参的传递,链表中指针的指向,通过看书多调试几次就能解决
2.在程序执行switch语句时,输入一个数后,执行后,程序直接退出。switch语句的输入项,非法,导致的程序直接退出。解决的方法,可用while语句先限制流入switch语句的非法输入项,从而解决输入项非法的问题。其他输入数字选择时,亦可用此方法解决
问题:
1.无法在机房的电脑运行
2.每次编译前都需将.cpp、.h、.dev以外的文件全部删除才行,否则即使故意打错几行代码也能成功编译,删除后编译出现
[Warning] non-static data member initializers only available with-std=c++11 or-std=gnu++11 [enabled by default] 3.txt文件的读取写入,参考了网上的和上课讲的,一次是进行动态内存分配的语句无法编译,一次是找不到文件,最后决定不做这个功能了。改进
1.增加读取保存功能,增加查询方式如按电话查找 2.编号是根据当前长度自动编号,虽然可以直接反应记录的数量使得编写程序时比较方便,但也使得无法每个人对应一个编号,也使得按编号查找如同摆设
功能模块结构图:
函数调用结构图:
运行结果与分析:
程序运行后得到开始菜单,结果如下图所示
开始菜单中包括创建通讯录、显示所有记录、查询记录、添加记录,返回本菜单以及推出程序,人们可以输入想要选择的模块进行程序的进一步运行。输入1,创建通讯录,结果下图所示:
输入2,显示所有记录,结果下图所示:
输入3,查询记录,结果下图所示:
两种查找方式;
输入4,增添记录,结果如下图所示:
输入5,修改记录,结果如下图所示:
两种方式,先查找再修改
输入6,删除记录,结果如下图所示:
两种方式,先查找再删除 输入7进入恢复菜单,结果如下图所示:
选择恢复方式
程序清单
test3.cpp #include
#define INFEASIBLE-1 #define OVERFLOW-2 struct txl { int num;//编号
char name[10];//姓名
char tel1[100];//电话1
char tel2[100];//电话2
char mail[100];//电子邮箱
char add[100];//家庭地址
};struct LNode { struct txl data;struct LNode *next;};
struct Sqlist {
int length;//当前长度
int listsize=100;//当前分配的存储,初始为100单位:sizeof(struct txl)
struct txl *elem;//存储空间基址
};typedef int status;#include“menu.h” #include“test3_seq.h” #include“test3_link.h” int main(){ int n,k=0,j;FILE *fp;//定义文件指针
struct Sqlist L;//定义全局变量L为结构体Sqlist
struct txl n1,*n2;struct LNode *head;//头指针
head=(struct LNode*)malloc(sizeof(struct LNode));head->next=NULL;menu();
while(scanf(“%d”,&n),n)//限制输入,当输入为int型,且不为0时循环
} {
switch(n){ case 1: Create(L,fp);k=1;break;//k=1表示已创建通讯录
case 2: if(k==1)ListTraverse(L);break;case 3: if(k==1)Search(L,n1);break;case 4: if(k==1)Insert(L);break;case 5: if(k==1)Modify(L);break;case 6: if(k==1)Delete(L,head);break;case 7: Recover(L,head);break;case 8: menu();break;
default:printf(“请输入0-8!n”);} if(k==0&&n>=2&&n<=6)printf(“请先创建通讯录!n请重新输入!n”);} return 0;menu.h void menu(){
//菜单函数
printf(“n”);printf(“ttt**************************n”);printf(“ttt*
欢迎使用
*n”);printf(“ttt*
通讯录管理系统
*n”);printf(“ttt**************************n”);printf(“n”);printf(“tt *************************************n”);printf(“tt *
1.创建通讯录
*n”);printf(“tt *
2.显示所有记录
*n”);printf(“tt *
3.查询记录
*n”);printf(“tt *
4.添加记录
*n”);printf(“tt *
5.修改记录
*n”);printf(“tt *
6.删除记录
*n”);printf(“tt *
7.恢复记录
*n”);printf(“tt *
8.显示菜单
*n”);printf(“tt *
0.退出程序
*n”);printf(“tt *************************************nnn”);
} void menu_1(){
//菜单函数
printf(“n”);printf(“ttt**************************n”);printf(“ttt*
欢迎使用
*n”);printf(“ttt*
通讯录恢复系统
*n”);printf(“ttt**************************n”);printf(“n”);printf(“tt *************************************n”);printf(“tt *
1.按编号恢复
*n”);printf(“tt *
2.按姓名恢复
*n”);printf(“tt *
0.退出恢复系统
*n”);printf(“tt *************************************nnn”);
}
test3_Seq.h int Create(struct Sqlist &L,FILE * &fp)//创建通讯录
{ system(“cls”);//清屏
int i,n,s=0;char k;
printf(“你所想创建通讯录个数(<=100):”);scanf(“%d”,&L.length);
L.elem=(struct txl*)malloc(L.listsize*sizeof(struct txl));//存储分配
if(!L.elem)//分配失败
{
exit(OVERFLOW);
}
for(i=0;i L.elem[i].num=i+1; printf(“编号为%d”,L.elem[i].num);//第i条记录的编号为i printf(“请输入姓名:”); scanf(“%s”,L.elem[i].name); printf(“请输入电话1:”); scanf(“%s”,L.elem[i].tel1); printf(“请输入电话2:”); scanf(“%s”,L.elem[i].tel2); printf(“请输入电子邮箱:”); scanf(“%s”,L.elem[i].mail); printf(“请输入家庭地址:”); scanf(“%s”,L.elem[i].add); } printf(“输入 0:退出, 输入8:返回菜单 请输入您的选择: ”); } int ListTraverse(struct Sqlist &L){//显示所有信息 system(“cls”);//清屏 int i;for(i=0;i printf(“编号:%d ”,L.elem[i].num); printf(“姓名:%s ”,L.elem[i].name); printf(“电话1:%s ”,L.elem[i].tel1); printf(“电话2: %s ”,L.elem[i].tel2); printf(“电子邮箱: %s ”,L.elem[i].mail); printf(“家庭地址: %sn”,L.elem[i].add); } printf(“输入 0:退出, 输入8:返回菜单 请输入您的选择: ”);} int Search(struct Sqlist &L,struct txl &n){//查找信息 system(“cls”);//清屏 int i,n1,j=0,k=0;char name1[10];//查找的姓名 int num1;//查找的编号 printf(“输入1按姓名查找 ”);printf(“输入2按编号查找 ”);while(scanf(“%d”,&n1)){ if(n1==1) { printf(“请输入您要查找的姓名:”); scanf(“%s”,name1); for(i=0;i { if(strcmp(name1,L.elem[i].name)==0)//姓名相同时 { n=L.elem[i]; printf(“编号:%d ”,L.elem[i].num); printf(“名字:%s ”,L.elem[i].name); printf(“电话1:%s ”,L.elem[i].tel1); printf(“电话2: %s ”,L.elem[i].tel2); printf(“电子邮箱: %s ”,L.elem[i].mail); printf(“家庭地址: %sn”,L.elem[i].add); k=1; break; } } if(k==0)//没有该姓名时 { printf(“没有这个记录n”); } break; } if(n1==2) { printf(“请输入你要查找的编号: ”); while(scanf(“%d”,&num1),num1){//限制输入 break; } if(num1<1||num1>=L.length)//没有该编号时 { printf(“没有这个记录n”); } for(i=0;i { if(num1==L.elem[i].num)//编号相同时 { n=L.elem[i]; printf(“编号:%d ”,L.elem[i].num); printf(“名字:%s ”,L.elem[i].name); printf(“电话1:%s ”,L.elem[i].tel1); printf(“电话2: %s ”,L.elem[i].tel2); printf(“电子邮箱: %s ”,L.elem[i].mail); printf(“家庭地址: %sn”,L.elem[i].add); break; } } break; } if(n1!=1&&n1!=2) printf(“请输入1或2!”); } printf(“输入 0:退出, 输入8:返回菜单 请输入您的选择: ”);} int Search_1(struct Sqlist &L,struct txl &n){//被其他函数调用以查找信息 int i,n1,j=0,k=0;char name1[10];//查找的姓名 int num1;//查找的编号 printf(“输入1按姓名查找 ”);printf(“输入2按编号查找 ”);while(scanf(“%d”,&n1)){ if(n1==1){ printf(“请输入您要查找的姓名:”); scanf(“%s”,name1); for(i=0;i { if(strcmp(name1,L.elem[i].name)==0)//姓名相同时 { n=L.elem[i]; printf(“编号:%d ”,L.elem[i].num); printf(“名字:%s ”,L.elem[i].name); printf(“电话1:%s ”,L.elem[i].tel1); printf(“电话2: %s ”,L.elem[i].tel2); printf(“电子邮箱: %s ”,L.elem[i].mail); printf(“家庭地址: %sn”,L.elem[i].add); k=1; break; } } if(k==0)//没有该姓名时 { printf(“没有这个记录n”); } break; } if(n1==2){ printf(“请输入你要查找的编号: ”); while(scanf(“%d”,&num1),num1){//限制输入 break; } if(num1<1||num1>=L.length)//没有该编号时 { printf(“没有这个记录n”); } for(i=0;i { if(num1==L.elem[i].num)//编号相同时 { n=L.elem[i]; printf(“编号:%d ”,L.elem[i].num); printf(“名字:%s ”,L.elem[i].name); printf(“电话1:%s ”,L.elem[i].tel1); printf(“电话2: %s ”,L.elem[i].tel2); printf(“电子邮箱: %s ”,L.elem[i].mail); printf(“家庭地址: %sn”,L.elem[i].add); break; } } break; } if(n1!=1&&n1!=2) printf(“请输入1或2!”); } } int Insert(struct Sqlist &L){//添加信息 system(“cls”);int i;char k;struct txl *newbase;if(L.length>=L.listsize)////当前存储空间已满,增加分配 { newbase=(struct txl*)realloc(L.elem,(L.listsize+10)*sizeof(struct txl)); if(!newbase)//存储分配失败 { exit(OVERFLOW); } L.elem=newbase;} printf(“请输入新成员的信息:”);printf(“这是第%d位”,L.length+1);//添加到最后 L.elem[L.length].num=L.length+1; printf(“请输入姓名:”); scanf(“%s”,L.elem[L.length].name); printf(“请输入电话1:”); scanf(“%s”,L.elem[L.length].tel1); printf(“请输入电话2:”); scanf(“%s”,L.elem[L.length].tel2); printf(“请输入电子邮箱:”); { scanf(“%s”,L.elem[L.length].mail); } printf(“请输入家庭地址:”); { scanf(“%s”,L.elem[L.length].add); } L.length++;//长度增加 printf(“输入 0:退出, 输入8:返回菜单 请输入您的选择: ”); } int Modify(struct Sqlist &L){//修改信息 system(“cls”);struct txl n,gai;int k,k1;while(1<2){ Search_1(L,n);//查找记录 printf(“是否修改此记录:(1=Y/2=N)n”); while(scanf(“%d”,&k)){//限制输入,当k成功赋值时循环 if(k!=1&&k!=2) printf(“请输入1或2!”); else break; } if(k==2) { break;//输入1修改,输入2不修改并结束循环返回 } if(k==1) { gai.num=n.num; printf(“请修改姓名:”); scanf(“%s”,gai.name); printf(“请修改电话1:”); scanf(“%s”,gai.tel1); printf(“请修改电话2:”); scanf(“%s”,gai.tel2); printf(“请修改电子邮箱:”); scanf(“%s”,gai.mail); printf(“请修改家庭地址:”); scanf(“%s”,gai.add); L.elem[n.num-1]=gai; } printf(“是否继续修改?(1=Y/2=N)”); while(scanf(“%d”,&k)){ if(k!=1&&k!=2) printf(“请输入1或2!”); else break; } if(k1==1)//继续循环 { ; } if(k1==2)//跳出循环 { break; } } } printf(“输入 0:退出, 输入8:返回菜单 请输入您的选择: ”);test3_link.h int Delete(struct Sqlist &L,struct LNode* &head)//删除通讯录并保存到链表 { system(“cls”);static int j=1;//当前编号 int i,k;struct txl n;struct LNode *p,*q; p=(struct LNode *)malloc(sizeof(struct LNode));if(!p)exit(OVERFLOW);//分配存储 q=(struct LNode *)malloc(sizeof(struct LNode));if(!q)exit(OVERFLOW); printf(“请输入你想删的成员:n”); Search_1(L,n);//查找记录 printf(“是否删除此记录?(1=Y/2=N)n”);//输入1删除,输入2不删除并结束循环返回 while(scanf(“%d”,&k)){ if(k!=1&&k!=2) printf(“请输入1或2!”); else break; } if(k==1) { p->data=n;//将 Search_1函数所找到的数据赋值给p->data p->data.num=j;//为删除的记录编号 p->next=head->next; head->next=p; q=head->next; for(i=n.num;i { L.elem[i-1]=L.elem[i]; L.elem[i-1].num=i;//编号 } L.length--; j++; } if(k==2) { ; } printf(“输入 0:退出, 输入8:返回菜单 请输入您的选择: ”); } int Recover(struct Sqlist &L,struct LNode* &head){ system(“cls”);int n,number,k,a=0;char name1[10];struct txl n1;struct LNode* q,*p;q=(struct LNode*)malloc(sizeof(struct LNode));//存储分配 p=(struct LNode*)malloc(sizeof(struct LNode));q=head->next;//指向第一个节点 p=head;//指向头指针 menu_1();//显示恢复菜单 while(scanf(“%d”,&n),n)//限制输入,当输入为int型,且不为0时循环 { printf(“请问要恢复哪个成员?n”); while(q!=NULL)//依次输出所有被删记录 { printf(“编号:%d ”,q->data.num); printf(“名字:%s ”,q->data.name); printf(“电话1:%s ”,q->data.tel1); printf(“电话2: %s ”,q->data.tel2); printf(“电子邮箱: %s ”,q->data.mail); printf(“家庭地址: %sn”,q->data.add); q=q->next;} if(n==1){ printf(“请输入所要恢复的编号n”);scanf(“%d”,&number);while(p!=NULL){ if(p->next->data.num==number) { L.elem[L.length]=p->next->data;//添加到末尾 L.elem[L.length].num=L.length+1;//编号 p->next=p->next->next;//将该记录从链表中删除 L.length++; printf(“恢复成功!n”); a=1;//标记有此记录,并已恢复 break; } p=p->next;} if(a==0)printf(“没有该编号n”); break; } if(n==2){ printf(“请输入所要恢复的姓名n”); scanf(“%s”,name1); while(p!=NULL){ if(strcmp(p->next->data.name,name1)==0) { L.elem[L.length]=p->next->data;//添加到末尾 L.elem[L.length].num=L.length+1;//编号 p->next=p->next->next;//将该记录从链表中删除 L.length++; printf(“恢复成功!n”); a=1;//标记有此记录,并已恢复 break; } p=p->next;} } if(a==0) printf(“没有该姓名n”); break;} if(n!=1&&n!=2&&n!=0){ printf(“请输入0-2!n”); } } printf(“输入 0:退出, 输入8:返回菜单 请输入您的选择: ”); 一、说教材分析 首先我谈谈我对这篇教材的分析: 本节课《制作通讯录》是福建教育出版社四年级下册第二课的内容,是基于第一节学习了制作简单表格的知识上的进一步完善。本节课利用网络环境,借助专题学习网站,创设信息化的教与学环境,利用优美、生动的画面,丰富有趣的情境,让学生在亲身的感受中说、做、学的过程,让学生通过问题情境的感受,学习解决问题的方法,形成一定的知识解决模型,并最终解决实际生活问题。本节课的学习既是学生巩固旧知识,也是掌握新知识的过程。 二、说教学目标 根据以上对教材的分析,我确定了三维目标: 1.知识目标:要求学生了解通讯录的一般格式,学会在表格中插入行; 2.能力目标:要求学生掌握通讯录的制作方法 3.情感目标:能激发学生的学习兴趣,培养学生自主探究和合作的精神 三、说教学重难点 通过对三维目标的综合总结,我得出本节课的 重点:插入规则的二维表格,并在单元格中添加数据; 难点:如何在表格中增加一列 四、说教法学法 要达成以上三项教学目标,特别是要突破教学重难点,我在教法的选择上以“激——导——探——放”为主要教学手段,目的是在课堂中通过创设情境激发学习兴趣,借助老帅引导,师生共同探究,大胆放手让学生在具体的实践操作中运用。对于课堂教学中,学生学法的选择是以“探究——合作——交流——运用”。学生通过自主探究,小组协同合作,组内交流、师生反馈评价,最后把所学的知识运用于具体的实践操作中。 五、说教学流程 这节课为了体现学生是学习的主体,以学生的学为立足点,教师的教为辅助点,我设计了以下的教学环节: 第一个环节 (一)情境创设 引入新课 1、课伊始,课件出示一段视频 内容为:一位同学回家准备做作业,却忘记作业内容,天又下起大雨,他想给同学打电话询问作业的内容 2、观看结束后,向学生提出一个问题:这位同学要打电话,需要什么呢? 通过这个问题的提出,映出如果有通讯录,就能给通讯录上的同学打电话了 顺势引出这节课的内容—制作通讯录(板书出) (这个环节的设计意图是通过让学生解决日常生活中遇到的问题来激发学生的学习兴趣,兴趣是最好的老师,它是学生主动学习、积极思考、大胆质疑、勇于探索的强大动力,所以通过这个环节,让学生自始至终主动参与学习,全身心地投入到学习活动中) 第二个环节 (二)小组合作 探究学习 在这个环节中有三个教学内容,第一个教学内容是 了解通讯录的一般格式并根据格式制作一张简单的通讯录 1、师:同学们,你们平常都从哪些地方可以看到通讯录呢 手机上的通讯录,以及各种纸质通讯录 2、课件展示一张简单的通讯录 设疑:同学们,这张通讯录有哪些部分呢? 让学生尝试着说一说通讯录的组成部分 在学生初步了解后,布置让大家制作一张自己组内成员的通讯录的任务 3、在任务中巡视指导学习较困难的小组 4、学生在初步尝试后,指名一组完成较好的小组长,上台操作 (这部分教学内容的设计思路:通过让学生自己动脑思考,动手尝试,调动学生参与教学的积极性,发挥学生自主探究的能动性,使课堂教学焕发出生机) 第二个教学内容是: 在表格中增加一列 1、给学生设疑:如何在通讯录中增加一列QQ号 然后向学生提供一份学习帮助材料,材料中是通过“表格和边框”工具插入一列的方法,让学生仔细阅读这份材料,与小组成员合作,在电脑完成增加一列,并填上QQ号码 学习帮助材料 增加一列的方法: 1、单击工具栏上的“表格和边框”按钮,会弹出一个表格和方框的工具栏。 2、将鼠标移动到要增加一列的位置,当鼠标变成一个铅笔形状时,按住鼠标左键,自上而下画一条线,这样就增加一列了 2、在任务中巡视指导学习较困难的小组 3、交流反馈 总结方法 学生在初步尝试后,指名一组完成较好的小组长,上台操作,要求边讲解边演示,根据学生的讲解,板书出: 插入一列的方法: “表格与边框” 工具—弹出工具栏—移动至增加列位置—按住鼠标画线(这部分内容设计想法是:让学生学习外在的理论知识,并通过尝试操作转化成内在的技能,培养学生从获取信息到处理信息的能力。给学生提供自主学习的空间。发挥学生学习的主动性,培养学生的自主学习能力,让学生成为学习的主人)②总结这一种插入列的方法后,让学生尝试“增加一列”的其他方法: 如:选中一列,单击鼠标右键,在弹出的功能中选择增加一列项 (这部分内容设计意图:鼓励创新,开发学生发散思维,充分开发学生个体的潜能,使学生的各种潜能得到优化和发展,从而不断提高学生个体各种素质水平,促进学生身心全面和谐发展) 第三个教学内容是: 手动调整列宽的教学 1、设疑: 师:同学们,通讯录我们做完了,但是是不是看上去不大整齐美观呢? 那我们要怎么调整呢?请同学们自己去尝试下 2、老师提醒学生注意要点,移动鼠标到边框线时当光标变成什么形状时才可以调整宽度,巡视指导学习较困难的小组 3、学生在初步尝试后,老师指名一组完成较好的小组长,上台操作,要求边讲解边演示 第三个环节 (三)深化运用 拓展延伸 1、布置任务:制作一张好友通讯录 2、每个学生在自己的电脑上进行练习,完成后汇报小组长,小组长负责检查小组成员全部完成情况,对优秀作品给予奖励 3、转播学生的作品,指名个别同学上台边讲解,边操作 (这部分内容设计思路:学生通过小组的任务驱使法,让学生能较好地完成教师预设的教学目标,又突破了教学重难点。) 4、师生共同评价 第四个环节 (四)总结: 中兴通讯股份有限公司 (以下简称中兴通讯) , 1997年在深圳交易所主板上市, 股票代码:000063, 并于2004年在香港联交所主板上市, 股票代码:0763。中兴通讯是中国大陆开发生产通讯设备和终端的公司, 全球领先的综合通信解决方案提供商, 也是中国大陆最大的通信设备上市公司, 全球第四大手机生产制造商。 公司经营范围包括:生产程控交换系统、多媒体通讯系统、通讯传输系统;研制、生产移动通信系统设备、卫星通讯、微波通讯设备、寻呼机、计算机软硬件、闭路电视、微波通信等。中兴通讯致力于设计、开发、生产、分销及安装各种先进的电信系统和设备。其中包括:运营商网络、终端、电信软件系统、服务及其他产品等。 中兴通讯是中国电信市场的主导通信设备供应商之一, 其各大类产品已经成功进入国际电信市场。在中国, 中兴通讯与中国移动、中国电信、中国联通等中国主导电信服务运营商建立长期稳定的合作关系。在国际电信市场, 中兴通讯已向全球160多个国家和地区的电信服务运营商提供创新技术与产品解决方案, 让全世界用户享有语音、数据、多媒体、无线宽带、有线宽带等全方位沟通。 在中国市场, 中兴通讯在通信行业处于领先地位, 直到2011年一直处于稳定发展阶段。表1是中兴通讯的年报基本数据, 我们可以看出中兴通讯2012年首次出现亏损, 2013年营业利润依然为负, 但较2012年增长约35亿元。再加上营业外收支, 最终使得净利润为正, 免去了“戴帽”的压力。从这点来看, 我们认为中兴通讯有较强的利润操纵动机。 二、异常事项及盈余管理分析 (一) 应收账款 由前文的分析可知, 中兴通讯2010年处于上升期, 2011年利润有所下滑, 2012年亏损, 2013年营业务收入持续下滑。从表2可以看出, 2012年营业收入和应收账款都有所下滑, 但坏账准备却增加了约11%, 可能存在多提坏账准备, 隐藏利润, 以待下一年度。2013年营业收入较2012年下降约11%, 但是应收账款总额却较2012年上升约1%。这说明2013年中兴通讯可能放宽了信用条款以推行过于激进的赊销政策, 以提高销售业绩, 但这可能会使收入质量、应收账款质量一定程度上有所下降。虽然2013年坏账准备较2012年增加约30%, 但是2012年的坏账准备基数存在盈余管理的嫌疑, 因此我们认为30%不具参考价值。 具体分析中兴通讯坏账准备计提方法, 我们发现其计提方法将应收账款分为单项与组合, 这与行业做法相同。其中按组合计提坏账准备的应收款项规定计提比例范围与实际计提比例如下: 由表3可以看出, 中兴通讯单一期间坏账计提比例变动幅度较大, 这就使得公司有很大的盈余管理操作空间。进一步分析中兴通讯实际的计提比例可知, 中兴通讯组合计提坏账准备比例是不断变化的, 而且这几年总体是呈逐步减少坏账的计提比例发展的。中兴通讯2013年组合计提坏账准备3, 243, 881千元, 如果按照2012、2011、2010年的比例计提则分别是3, 232, 289千元、3, 259, 629千元、3, 534, 545千元。参照2010年的标准, 中兴通讯可能少计提了约3亿坏账准备, 进而高估利润3亿元。 (二) 固定资产 中兴通讯固定资产的折旧采用年限平均法分类计提, 一共分为永久土地使用权、房屋及建筑物、电子设备、机器设备、运输工具及其他设备6类。其中2013年房屋及建筑物的使用寿命由以前年度的30年调整为30-50年, 年折旧率也由3.17%调整为1.9%-3.17%。其他分类无变化。 由下表可以看出中兴通讯固定资产持续增长, 2013年固定资产增加8.3亿 (7.3%) , 计提的折旧却降低了0.9亿 (8.4%) 。其中房屋及建筑物增加了8.5亿 (17.9%) , 折旧减少了0.2亿 (13.7%) 。根据规定电子设备、机器设备、运输工具的使用寿命为5-10年, 但2013年度这些项目的原值变化与折旧计提的变化并不匹配, 很可能存在改变折旧年限的问题。总体上来说, 中兴通讯在固定资产上存在利用改变使用寿命从而进行盈余管理的嫌疑。 (三) 处置子公司 中兴通讯继2012年出售两家子公司后, 于2013年度内又连续处置两家控股子公司——深圳中兴力维技术有限公司、无锡市中兴光电子技术有限公司, 获得投资收益866, 677, 000元。 其中, 深圳中兴力维技术有限公司 (以下简称中兴力维) 于2012年12月28日签订转让协议, 中兴通讯对其投资成本为244, 827, 000元在所有子公司中排名第5, 其盈利状况良好, 并于2011年、2012年分别向母公司发放现金股利7, 500, 000元和104, 148, 000元。且在其转让年度, 中兴通讯的持股比例由80%增持到91%, 投资成本由6, 000, 000元激增到244, 827, 000元, 而中兴力维的注册资本达到10, 000, 000元, 然后在该年度内中兴力维发放大额现金股利后, 中兴通讯及其全资子公司中兴香港分别向与基宇投资出售合计为81%的股份, 处置对价为1, 292, 372, 000元, 处置收益为852, 567, 000元至此中兴通讯将通过中兴香港, 间接保留中兴力维9%的股权。 该事项过程中, 中兴通讯先是增持了10%股份, 该年度发放大额现金股利后, 迅速与基宇投资签订出售协议, 并于2013年1月16日完成工商变更登记。同一年度内增持、出售, 看似矛盾的商业行为, 再加上获得大量现金股利就不难理解了。2012年中兴通讯获得中兴力维发放的现金股利为其投资成本的42.54%, 为上年度的13.88倍。由此我们不难看出, 中兴通讯于2012年初已计划出售中兴力维, 为能从前子公司中兴力维获取更多的收益, 中兴通讯企图通过增持控股, 以取得更大的控股权, 并最终到达获取高额的现金股利的目的。 2013年中兴通讯出售的另一家子公司无锡市中兴光电子技术有限公司 (以下简称无锡中兴) 于10月28日转让于广东中科白云创业投资有限公司。无锡中兴处置日净资产为134, 293, 000元、2012年度净利润为-8, 500, 000元, 中兴通讯通过出售其65%的股份获得处置对价101, 400, 000元, 处置收益为14, 110, 000元, 而占其当年净利润0.98%, 因此我们认为若对价公允, 则该事项没有盈余管理的痕迹。 (四) 营业外收入 2013年度中兴通讯利润表中营业外收入达3, 465, 428, 000元, 较上年增长12.47%, 相对于营业收入的负增长而言, 营业外收入的高速增长缺乏可靠的依据。笔者认真分析营业外收入的主要构成, 发现其中增值税即征即退金额为2, 305, 836, 000元, 其他项 (包括政府补助、合同罚款收益及其他各类收益) 为1, 159, 592, 000元。 有学者认为, 地方官员的升迁机制常常与本地经济能否有良好地发展有着直接的关系。为了争夺市场资源, 提高自身政绩, 地方政府在自身利益的驱动下, 常常通过减免税赋、提供税收返还、财政补贴等方式帮助企业提高业绩, 满足监管部门制定的硬性指标要求。 根据以上理论, 我们认为本案例中值得注意的是中兴通讯2013年度的营业收入为68, 951, 943, 000元, 较上年同期下降了11.81%, 营业亏损为-1, 493, 094, 000元, 而净利润仅为1, 433, 636, 000元, 因此我们推测, 营业外收入中增值税退税、政府补贴的增长是有人为目的的——弥补中兴通讯的营业亏损并使其实现盈利, 以使其符合监管部门的规定, 避免被退市的后果。 三、总结 经以上分析, 我们认为中兴通讯存在盈余管理。由于2012年度亏损, 2013年度营业收入继续下滑, 营业利润为负, 中兴通讯有很强的盈余管理动机。本文具体分析了应收账款、固定资产、处置子公司和营业外收入四个方面的盈余管理。我们认为站在中兴通讯的角度, 其盈余管理是成功的, 暂时消除了“戴帽”压力。但是, 从一个投资者或者潜在投资者的角度看, 盈余管理一定程度上降低了财务报告的质量, 投资者获得这样的信息可能会影响其决策。 参考文献 [1]陈武朝.经济周期、行业周期性与盈余管理程度——来自中国上市公司的经验证据.南开管理评论, 2013 (03) . [2]魏涛, 陆正飞, 单宏伟.非经常性损益盈余管理的动机、手段和作用研究——来自中国上市公司的经验证据[J].管理世界, 2007 (01) . 关键词:通讯软件;基本功能;高级语言;应用能力 中图分类号:TP391 文献标识码:A 文章编号:1674-7712 (2013) 12-0000-01 一、需求分析 (一)技術可行性分析:目前通讯软件已经有成熟的产品,相对技术层面完全 可以满足系统前台和后台的需求,尤其VB高级语言,特有通信的端口使得编程实现变得更加方便简捷。 (二)经济可行性:本通讯软件,目的是完成通讯软件的基本功能,便于应用。在有具体需求时,加以扩展。所以经济花费极小。在完成功能编写后,功能可以扩展,也可以为企业、公司所使用有一定的经济价值,具有经济可行性。 (三)用户功能分析:注册过的用户才可以使用该软件发送和接受信息。用 户注册功能:注册新用户。能够添加好友,并显示在好友名单中。能够在好友 名单中选择一个好友,给好友即时发送信息。发送的信息中可以带有表情符号。 当好友不在线时信息存储在服务器,也就是可以给其留言。当收到信息时要求有提示,避免错过及时查看信息。能够存储历史信息,一边查看以前的信息。 能够将某些人添加到黑名单,能自动屏蔽黑名单中的人发送来的信息,避免被骚扰。 二、功能实现与主要模块介绍 (一)功能与实现系统采用客户/服务器设计模式,以服务器端进行响应,客户端发出请求。客户端等待应答,得到相应后(即得到应答)可完成请求或者被拒绝操作。通信协议选用TCP/IP协议,通讯软件的实现同样可以使用UDP协议来实现,但是在实际应用工作中,UDP要劣于TCP/IP协议簇,因为前者属于无连接无应答式协议,安全不能得到保证,一些屏蔽功能的操作,使用UDP协议无法实现或者实现困难。单位的通讯软件后台数据库要求不高,可以任意选用。设计以两大部分进行。首先是服务器部分,整理并总结服务器端所需要做的工作,划分功能模块,进一步对应到窗体的设计和控件的选用。客户端也是同样的流程,客户端主要包含的窗体应该有主索引窗体、用户注册登录窗体、通讯消息窗体等等。具体代码因篇幅有限以服务器端和客户端口的连接通信为例,简要说明。 PrivateSubwskServer_ConnectionRequest(IndexAsInteger,ByValrequestIDAsLong) OnErrorResumeNext LinkCount=LinkCount+1 LoadwskServer(LinkCount) wskServer(LinkCount).LocalPort=0 wskServer(LinkCount).AcceptrequestID EndSub 此段代码是连接到服务器端,服务器用户进行计数,从VB的控件WINSOCK来创建服务,服务器端为这个请求设置相应的服务。 (二)模块介绍:如果从模块化角度分析,通讯软件应该有用户注册模块、系统维护模块、屏蔽模块、添加联系人模块。用户注册模块是为用户第一次登录服务的,进行相关信息的登记并存入数据库,完成注册。这里注册模块和登录模块是同一模块,如果不是第一次的用户则直接点击登录,输入用户名和密码,通过数据库的验证为正确,就可以使用。屏蔽模块,是对用户通讯选择的人性化体现,如果用户不喜欢和某人联系,为了避免骚扰,可以屏蔽某人的信息,使得某人的信息不会再出现在用户的界面中。添加联系人模块,提供了号码添加和关键字添加,你可以添加已知固定号码的用户,也可以根据关键字进行添加,这里是采用模糊查询的方式进行关键字搜索。系统维护提供了管理员多层密码管理和系统维护的功能。当系统出现错误时便于修改。 三、功能测试 这里主要采用黑盒法对功能进行测试,首先测试消息收发功能软件运行过程中,可以给指定的用户发送即时消息。如果接收到其他用户发送给自己的消息,操作系统状态栏上的图标就会不停地变化以提示用户。在状态栏图标上单击鼠标右键,就会弹出一个菜单。单击“显示新消息”菜单项可以显示用户收到的新消息。双击该新消息,就会自动将该消息从新消息队列中删除,并且添加到历史消息中。接着测试登录、离线、屏蔽功能。启动菜单;离线、上线按钮可以切换客户端是否在线;屏蔽可以显示用户设定的不显示用户;再对历史记录功能进行测试在客户端会保留用户收到的历史消息,在状态栏的图标上单击鼠标右键查找后会出现历史记录。经测试能完成基本功能。 参考文献: [1]丁龙.基于VB的定制软件开发与应用[J].电脑编程技巧与维护,2012(12). [2]陈丽.浅谈VB编程常用技巧[J].科技信息(科学教研),2008(05). [3]李瑾颉.基于即时通讯工具的知识传播与网络结构研究[D].山西师范大学,2012. [4]罗伟.基于Android平台的即时通讯系统的研究与实现[D].湖南师范大学,2009. [5]王森.即时通讯工具对人际关系的影响[D].成都理工大学,2009. [6]李长城.基于Linux的即时通讯软件的研究与实现[D].哈尔滨工程大学,2008. [7]孟锐.基于Linux的网络即时通讯软件设计与实现[D].西南交通大学,2002. 教学目标: 1、知识目标:了解表格的基本构成和表格制作的几种方法; 2、技能目标:掌握通过菜单方式制作基本的二维表格,培养学生的动手操作能力; 3、情感目标:通过对名片信息的分析培养学生的信息搜集和整理能力。教学重点: 1、认识表格的行、列和单元格; 2、规则的二维表格的插入; 教学难点: 表格中文本格式的设置。教学过程: 一、创设情景 师:今天上课老师想请问一下大家有没有看到过通讯录啊? 生:没有(如果有就请学生介绍一下通讯录) 师:对,通讯录一般就是你所要联系的人的一些通讯方式,同学们见过名片没有,请大家分析一下,这样一张通讯录跟名片相比有什么好处吗? 生:可以更方便的找到信息。 师:说得很好,因为通讯录中使用了表格,而在我们日常生活中使用表格可以更加简洁、清楚的表述相关内容。 师:那么今天这节课我们就通过WORD中的表格功能和上节课制作的名片为自己来制作一份小小通讯录。(板书:制作好友通讯录) 二、自主探究 师:老师再问一下,在日常生活中你看到过什么表格? 生:课程表、值日表、成绩表…….师:那么你知道一张表格有哪些元素组成吗?或者表格中各相关部分的名称。 生:不知道 师:出示一张表格,并为大家介绍表格中各相关部分的名称。 / 4 生:观看图片中表格组成部分。 师:同学们请想一想,既然是通讯录,那么必须要有哪几项内容? 生:都有姓名、地址、电话等 师:那么我们这些共同的信息应如何对应到表格中相应的单元格呢 生:回答(如果回答不出教师可以提示一下) 师:一般情况下我们把这些共同的信息都是填写在第一行作为列标题,从第二行开始应该是具体信息,有多少共同信息就应该有几列,而你的通讯录中要有多少朋友就可以添加几行(一边讲解一边在黑板上演示) 师:现在我们已经在黑板上画好了一张通讯录了,我看有的同学等不及要自己动手操作了,不要急,老师已经在大家的桌面上放了一个帮助文件,里面详细介绍了表格制作的步骤,请大家打开WORD,根据帮助文件,赶快动手做自己的通讯录吧。 生:打开帮助文件,动手制作表格 师:巡回指导 三、充实内容 师:刚才我看到有许多同学已经根据帮助文件制作出了通讯录所需的表格了,下面我们请一位同学上来演示一下他是怎么操作的生:上台演示(一边操作一边讲解) 师:这位同学做得非常棒,我们应该鼓励一下。不过老师还要告诉你,其实制作表格的方法除了刚才那位同学使用的方法外还有另外的方法,想不想知道啊?你可以在帮助文件中去找找看,找到后也可以试一试。 生:没完成的同学继续完成,做好的同学试着用另外的方法建立一个表格。 师:继续辅导学生。 师:经过检查我发现基本上同学的通讯录的基本框架(表格)已经搭好了,那么接下去应该干什么事呢? 生:输入文字 师:对了,现在应该为通讯录填充内容了。(怎么输入文字可以看帮助文件) 师:赶快动手吧,看谁在最短的时间内做的又快又漂亮。 生:在表格中输入文字 / 4 师:巡回指导 师:大家请停一下,刚才老师在看大家操作的同时又发现一个问题:就是大家在表格的单元格中输入内容时,有的单元格太大,(文字较少时)而有的单元格又太小(如在输入地址时),所以导致很多的同学的通讯录看上去不太整齐,能不能想办法呢?老师教你一招:只要你在表格中单击鼠标右键-----自动调整-----调整表格,这样单元格就能根据内容自动调整了。快试试吧! 生:继续操作 师:大家可以再停一下,老师刚才发现一个同学输入文字的方法很快,我们来看看他是怎样输入的 生:演示把名片中的信息通过复制、粘贴的方法移到表格中 师:这位同学真是有办法,说明他是一个爱动脑筋的人,大家在平常的学习中也应该学会这种方法。 生:继续操作 四、精益求精,美化表格 师:我看有的同学的通讯录中已经有很多朋友的名单了,但是你觉得你的通讯录还缺少了些什么吗? 生:名字 生:最好可以给表格添加颜色 师:同学们想得非常周到仔细,要是我们能给通讯录添上背景那这个通讯录就更加漂亮了(展示范例),怎么添加呢,大家到帮助文件中去寻找吧,等一下我们来比一下谁的通讯录的最漂亮了。 生:自主尝试表格中文本格式的设置 师:给予学生适当的提示(教师简单演示) 五、展示作品,评价交流 师:我看很多同学都做好自己的通讯录,而且有的同学已经等不及想把自己的作品给其它同学欣赏了,好,接下来我们来欣赏几位同学的作品 生:欣赏同学的作品 师:你觉得这位同学的作品怎么样 生:评价同学的作品 / 4 六、小结 师:马上要下课了,我们再来回忆一下这节课你学会了什么 生:怎样在WORD中插入一个表格 师:对,这节课我们通过制作小小通讯录学会了在WORD中怎样插入一个表格,其实在我们日常生活中除了通讯录,还有很多表格,象我们一开始提到过的课程表等等,希望同学们回去后再去制作一张表格,比如说常用电话表,做好后你可以用电子邮件发给我。师:下课。 2013年4月17日星期三下午,由物电学院团委主办、秘书处承办的“风筝制作大赛”在7#205教室顺利开展。 下午2:00,比赛正式开始。首先由秘书处的同学向本次参加比赛的同学讲述比赛的目的和规则。随后选手们三人一组用秘书处事先为他们准备好的纸、笔、颜料等工具开始制作风筝。选手们大胆想象,尽情地发挥自己的聪明才智,用双手和智慧去为自己的风筝增色添彩。有的忙着画画,有的忙着搭支架,其中也不乏技艺高超者,比赛现场显得紧张而有序。为了突出重围,选手们不得不使出自己的看家本领,制作出的风筝形状各异,色彩斑斓。制作完成后,由同学们到操场当场试飞。看着满天飞舞的风筝,同学们的脸上流露出了灿烂的笑容。在试飞过程中,评委给每一组选手打分,并评出了一、二、三等奖。篇2:公司通讯录制作
篇3:基于中兴通讯公司的盈余管理分析
篇4:高级语言应用—制作通讯软件
篇5:《制作通讯录》参考教案1
篇6:风筝制作大赛通讯稿