第一篇:软件技术基础学习心得
不知不觉中9周的《软件技术基础》 这门课课已经结束了,虽然时间有点短,但这九个星期的学习中我却受益匪浅,不仅让我系统的了解了许多计算机软件相关的基础知识和一些常用的系统软件,还让我有了更科学的方法去分析一些软件方面的问题,这对于我今后的学习和工作都是有很大帮助的。下面来谈谈我对学习这门课的一点点心得。
首先,我们认识到了计算机对现在社会、生活的影响之重,我们要想灵活的应对以后生活中的各种问题,拥有一个好的计算机技术必不可少的,而要想真的学好计算机技术,我们首先就得对计算机的操作、工作原理和规则等有一个清晰的认识。
如今仅仅掌握计算机语言并不能有效地使用计算机,我们必须掌握数据结构和算法方面的知识才能应对众多复杂的应用课题。刚开始学习数据结构时感觉它很抽象,而且感觉它没多大用处,后来发现不然,我们学习的是一些方法、思维,只有学会了这些我们才能解决一些非数值运算的程序设计方面的问题。
以前我们用过数据库比如Access,但我们只是很基础的应用它们,并不懂它的创建和工作原理,自从学习了这门课,我才初步了解了数据处理和数据管理方面的一些知识,并学到了
SQL语言的一些基础知识,这对我以后更深层次的学习计算机技术打下了一个基础。
虽然这门课程已经结束,我们学到的也是很基础的一部分,但它对我们影响很深,让我们以后学习更简单了。当然我仍会继续学习各种关于计算机技术方面的知识,让自己有一个过硬的技术,去应对各方面的问题。
第二篇:软件技术基础实验报告
《软件开发技术基础》
实验报告
学院:XX学院
班级:XX
姓名: XX
学号:XX
《软件开发技术基础》实验报告
实验名称:实验一 顺序表的操作
班 级 学 号 姓 名 第 周 星 期 节 成 绩
一、实验目的:
1、掌握顺序表结构的实现方式;
2、掌握顺序表常用算法的实现;
3、熟悉利用顺序表解决问题的一般思路;
4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验要求:
1、掌握顺序表的特点及常见算法。
2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。
三、实验内容:
1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:
(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。
(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。
2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。
四、程序要求:
1、采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过50个。
2、写出完整的程序并能调试运行。
五、实验结果:
1、顺序表的结果:
2、电话簿的结果:
六、实验中遇到的问题及解决方法:
1.在删除数据的时候如果有两个一样的数时要怎样解决? 解决方法:用while进行判断。
2.在删除操作中,删除函数中的l是指针,所以用->指向,而在主函数中l是结构体,用“.”。3.在查找的时候有一个返回值,而这个返回值是指针,所以在写查找函数的时候要把返回值类型写上。
七、实验心得体会:
一开始不知所措,首先应该有一个大的方向,把主程序编号,再逐步求精,落实到每一个函数的编写。对于c语言要熟练掌握,要熟悉循环等得操作,要熟练掌握顺序表中的插入,删除,查找,的基本函数。在此的基础上灵活使用。附:
1、顺序表的程序: #include
struct Seqlist {
};Seqlist *init(){
} void insert(Seqlist *p){
int num=0;printf(“请输入要键入的个数:”);scanf(“%d”,&num);if(num<1)printf(“键入的数据个数错误!n”);Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;int data[MAXSIZE];int length;else {
printf(“键入数据为:n”);for(;num>0;num--){ p->length++;scanf(“%d”,p->data+p->length-1);
}
}
} if(p->length==MAXSIZE){
} printf(“数组已满n”);break;getchar();void deletee(Seqlist *p){
} int find(Seqlist *p){ int i=0;printf(“请输入要删除元素的位置:”);scanf(“%d”,&i);if(i<1||i>p->length)printf(“表中没有第%d个元素!n”,i);else {
} getchar();for(int j=i;j<=p->length-1;j++)p->data[j-1]=p->data[j];p->length--;
} int x;printf(“请输入要查找的数据:”);scanf(“%d”,&x);for(int i=0;i
length;i++){
} if(i>=p->length)printf(“数组中没有此数据!n”);if(p->data[i]==x){
} printf(“此数据位于第%d个位置n”,i+1);return i+1;getchar();return 0;void display(Seqlist *p){
} int main(void){ Seqlist *p;for(int i=0;i
length;i++)printf(“%-5d”,p->data[i]);putchar('n');getchar();
p=init();char flag;printf(“1-插入 2-删除 3-查找 4-显示 0-退出n”);while(1){
printf(“请输入操作:”);switch(flag=getchar()){ case '1':insert(p);putchar('n');break;case '2':deletee(p);printf(“删除后数据为:”);display(p);putchar('n');getchar();break;case '3':find(p);putchar('n');getchar();break;case '4':printf(“显示数据为:”);display(p);putchar('n');break;case '0':free(p);return 0;}
}
}
2、电话簿的程序: #include
string name;string phonenumber;string phone;contact *next;}CNT;class Phonebook { public:
Phonebook();CNT *Input();CNT *Turn_to_end();void Add();void Delete();void Showmenu();CNT *Find();void Show_item(CNT *p);void Display();void Modification();private: };
Phonebook::Phonebook(){ head=new CNT;CNT *head;
} head->next=NULL;void Phonebook::Show_item(CNT *p){ cout<<“|----姓名----|--电话号码--|-------------地址------------|”< } void Phonebook::Display(){ CNT *p;cout<<“|----姓名----|--电话号码--|-------------地址------------|”< } cout<<“|------------------------|”< CNT *Phonebook::Input(){ } CNT *Phonebook::Turn_to_end(){ } CNT *temp=head;while(temp->next!=NULL){ } cout<<“n”;return temp;temp=temp->next;CNT *temp;temp=new CNT;cout<<“请输入姓名:”;cin>>temp->name;cout<<“请输入手机号码:”;cin>>temp->phonenumber;cout<<“请输入固定电话:”;cin>>temp->phone;temp->next=NULL;cout<<“n”;return temp; void Phonebook::Add(){ } void Phonebook::Delete(){ CNT *p,*q;q=p=head;string data;cout<<“请输入要删除联系人的信息:”;cin>>data;for(p=p->next;p!=NULL&&p->name!=data&&p->phonenumber!=data&&p->phone!=data;CNT *temp,*p;temp=Input();p=Turn_to_end();p->next=temp;cout<<“n”;p=p->next) q=p;if(p!=NULL){ q->next=p->next;delete p; } } else cout<<“该信息不存在”< } CNT *Phonebook::Find(){ CNT *p=head;string data;cout<<“请输入要查找或要修改的联系人的信息:”;cin>>data;for(p=p->next;p!=NULL&&p->name!=data&&p->phonenumber!=data&&p->phone!=data;cout<<“ 电话簿”< if(p!=NULL)Show_item(p);else } cout<<“不存在该信息”< } int main(){ int select;Phonebook phbook;CNT *p;p=Find();if(p!=NULL){ } cout<<“n”;cout<<“请输入姓名:”;cin>>p->name;cout<<“请输入手机号码:”;cin>>p->phonenumber;cout<<“请输入固定电话:”;cin>>p->phone; phbook.Showmenu();while(1){ cout<<“n请输入要选择的操作(0~6):”;cin>>select;getchar();switch(select){ case 0: exit(0);break;case 1: phbook.Add();break;case 2: phbook.Display();break;case 3: phbook.Delete();break;case 4: phbook.Find();break;case 5: phbook.Modification();break; } } } return 0; 实验名称:实验二 链表的操作 (一)班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、掌握单链表结构的实现方式; 2、掌握单链表常用算法的实现。 二、实验要求: 1、掌握链表的特点及常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、设计一个链表,要求编程实现如下任务: (1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。 (3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。 (4)在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。 四、程序要求: 1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。 2、写出完整的程序并能调试运行。 五、实验结果: 六、实验中遇到的问题及解决方法: 问题:在查找数据时显示的是一样的? 解决方法:在查找函数前要标明返回值的类型lnode *find。 七、实验心得体会: 首先要把书上的关于单链表的定义理解,在这个的基础上使用它。单链表通过结点在数据后附加后继元素的指针信息,可以更灵活的添加,删除,查找,插入,元素。要清楚指针的指向。首先要定义一个头结点,并且指针域要为空。将各个操作分别编写函数,有利于分块使用而且可以多次使用。附: #include { cout<<“请输入数组的个数(小于50):”;cin>>leng;cout<<“请输入数据:”;for(int i=0;i } for(int j=i;j { if(a[i]==temp){ x=i+1;cout<<“你要查找的数是数组的第”< } } if(x==0)cout<<“数组中没有你要查找的数”;} 实验名称:实验三 链表的操作 (二)班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、熟悉利用线性链表解决问题的一般思路; 2、参照给定的链表的程序样例,验证给出的链表的常见算法,了解单链表结构的优点和不足。 二、实验要求: 1、熟练掌握链表的使用,并能运用其解决些常规问题。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、使用链表实现一个电话本的管理程序,电话本中的每条记录包括姓名和电话两项。要求实现菜单、初始化、添加、删除和显示等功能。 四、程序要求: 1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。 2、写出完整的程序并能调试运行。 五、实验结果: 六、实验中遇到的问题及解决方法: 1.实验结果版面不好看 解决方法:反复调试执行,每次都对自己不满意的地方进行一些改正。2.怎样比较name与s->name? 解决方法:用string.h中的strcmp函数。3.在传递数据时有问题? 解决方法:返回的值要注意数据类型,是指针还是整数等。 七、实验心得体会: 在应用中可以利用while实现选择,并根据选择用switch来完成选择。为了简化编程,结点插入操作可仅仅在头部进行。单链表的方法使添加操作更加简便。不需要事先分配结点空间,而是在需要时动态的申请,节省了空间。、附: #include void show_menu(){ puts(“1添加 2删除 3查找 4插入 5显示 0退出”);} void show_item(STU *p){ printf(“|编号| 学号 | 姓名 | 电话号码 |n”);printf(“|1 |%-12s|%-12s|%-12s|n”,p->stu_number,p->stu_name,p->stu_phone); } STU *init(){ STU *p;p=(STU *)malloc(sizeof(STU));p->next=NULL;return p;} void display(STU *head){ int i;STU *p;p=head->next;printf(“|编号| 学号 | 姓名 | 电话号码 |n”);for(i=1;p!=NULL;i++,p=p->next){ printf(“|%-4d|%-12s|%-12s|%-12s|n”,i,p->stu_number,p->stu_name,p->stu_phone);} } STU *turn_to_end(STU *head){ STU *p;for(p=head;p->next!=NULL;p=p->next);return p;} STU *putin(){ STU *temp;temp=(STU *)malloc(sizeof(STU));printf(“请输入姓名:”);gets(temp->stu_name);printf(“请输入学号:”);gets(temp->stu_number);printf(“请输入电话号码:”);gets(temp->stu_phone);temp->next=NULL;return temp;} void add(STU *head){ STU *temp,*p;p=head;temp=putin();p=turn_to_end(head);p->next=temp;} STU *find(STU *head,int i){ STU *p;if(i<1) puts(“输入错误”);else { for(p=head;p->next!=NULL&&i>0;i--,p=p->next); if(i>0) { puts(“不存在该结点”); return NULL; } } return p;} STU *find_stu(STU *head,char *data){ STU *p,*q;q=p=head;for(p=head->next;p!=NULL&&strcmp(p->stu_name,data)!=0&&strcmp(p->stu_number,data)!=0&&strcmp(p->stu_phone,data)!=0;p=p->next) q=p;if(p!=NULL) return q;else { puts(“不存在该信息”); return p;} } void delet(STU *head,char *data){ STU *p,*q;p=q=head;q=find_stu(head,data);if(q!=NULL){ p=q->next; q->next=p->next; free(p);} } void insert(STU *head,int i) { STU *p,*q,*temp;q=p=head;if(i<0) puts(“输入错误”);else if(i==0){ temp=putin(); temp->next=p->next; q->next=temp; } else if(find(head,i)!=NULL){ q=find(head,i); p=q->next; temp=putin(); q->next=temp; temp->next=p;} else return;} int main(void){ STU *head,*temp;int selct,node;char data[12];head=init();show_menu();while(1){ printf(“请选择操作:”); scanf(“%d”,&selct); getchar(); switch(selct) { case 1: add(head); putchar('n'); break; case 2: display(head); printf(“请输入要删除学生的学号、姓名或电话号码:”); } scanf(“%s”,data); getchar(); delet(head,data); display(head); putchar('n'); break;case 3: puts(“请输入要查找的数据”); scanf(“%s”,data); getchar(); if(temp=find_stu(head,data)) { show_item(temp->next); } else puts(“ 不存在该信息”); putchar('n'); break;case 4: puts(“请输入要插入结点的位置”); scanf(“%d”,&node); getchar(); insert(head,node); putchar('n'); break;case 5: display(head); putchar('n'); break;case 0: exit(0); break;} } return 0; 实验名称:实验四 栈的操作 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 掌握栈的的定义和运算,了解栈的应用。 二、实验要求: 1、掌握栈的特点及常见算法。 2、参照给定的栈的程序样例,验证给出的栈的常见算法。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、堆栈的测试和应用。要求: 设计一个主函数实现对顺序堆栈代码进行测试。测试方法为:依次把数据元素1,3,5,7,9入栈,然后出栈堆栈中的数据元素并在屏幕上显示。 四、程序要求: 1、栈的长度自行确定。 2、重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。 3、写出完整的程序并能调试通过。 五、实验结果: 六、实验中遇到的问题及解决方法: 七、实验心得体会: 栈是后进先出表,只允许在栈顶进行插入和删除。要掌握顺序栈初始化,出栈,入栈的基本程序,在理解得基础上加以运用。要清楚栈和单链表的区别。附: #include void Sqstack::push(){ int temp;if(top>=maxsize-1){ cout<<“堆栈已满”< cout<<“请输入要进栈数的值”< cin>>temp; top++; *(data+top)=temp;} } void Sqstack::pop(int &e){ if(top>-1){ e=*(data+top); top--; cout< cout<<“堆栈已空”;} cout< i=top; for(;i>=0;i--) cout<<*(data+i)<<“ ”;} else cout<<“空栈”;cout< void Sqstack::modify(){ int temp;cout<<“请输入栈的长度”< maxsize=temp;else cout<<“输入错误栈的长度必须>0”< int main(){ Sqstack test;int temp,select;cout<<“1.进栈 2.出栈 3.显示 4修改栈长度 0.退出”< cout<<“请选择操作:”; cin>>select; switch(select) { case 1: test.push(); break; case 2: test.pop(temp); break; case 3: test.display(); break; case 4: test.modify(); break; case 0: exit(0); break; default: cout<<“输入错误按任意键重新输入”< getch(); break; } } return 0;} 实验名称:实验五 队列的操作 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 掌握队列的定义及其运算,了解队列的应用。 二、实验要求: 1、掌握队列的特点及常见算法。 2、参照给定的队列的程序样例,验证给出的队列的常见算法。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、队列测试和应用。要求: 设计一个主函数对循环队列代码进行测试。测试方法为:依次把数据元素2,4,6,8,10入队,然后出队中的数据元素并在屏幕上显示。 四、程序要求: 1、队列的长度由自行确定。 2、重点理解队列的算法思想,能够根据实际情况选择合适的存储结构。 3、写出完整的程序并能调试通过。 五、实验结果 六、实验中遇到的问题及解决方法: 七、实验心得体会: 队列是只允许在一端进行删除操作的线性表。在操作时会有假溢出的情况出现,可以将存放队列元素的数组守卫相接,形成循环队列。即:rear=(rear+1)%m;Front=(front+1)%m 附: #include typedef struct Temp { int data; struct Temp *next;}T;class Linksqueue { private: T *front,*rear;public: Linksqueue();void Enqueue();void Dequeue(T *);void display();}; Linksqueue::Linksqueue(){ front=rear=new(T);front->next=NULL;} void Linksqueue::Enqueue(){ T *temp;temp=new(T);cout<<“请输入入队元素的值:”< void Linksqueue::Dequeue(T *s){ T *temp;if(front->next!=NULL){ temp=front; front=front->next; *s=*front; cout<<“出队元素的值:n”< delete temp;} else cout<<“队列已空”< void Linksqueue::display(){ T *temp;if(front==rear) cout<<“空队”< cout<<“队列所有元素为 front-> ”; for(temp=front->next;temp->next!=NULL;temp=temp->next) { cout< } cout< cout<<“->rear”< int main(){ Linksqueue temp;T * a;a=new(T);int select;cout<<“1入队 2出队 3显示 0退出”< cout<<“请选择操作:”; cin>>select; switch(select) { case 1: temp.Enqueue(); break; case 2: temp.Dequeue(a); break; case 3: temp.display(); break; case 0: } exit(0); break;default: cout<<“输入错误按任意键重新输入”< getch(); break;} } return 0; 实验名称:实验六 二叉树的生成与遍历 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、熟悉二叉树节点的定义和生成方式; 2、熟悉二叉树链式结构的生成方式; 3、掌握二叉树遍历算法的实现。 二、实验要求: 1、掌握二叉树的常见算法。 2、参照给定的二叉树的程序样例,验证给出的有关二叉树的常见算法,并实现有关的操作。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1.设计实现二叉树的建立及遍历算法,要求: (1)编写创建二叉链式存储结构的二叉树程序并输出。(2)编写递归实现二叉树的先序、中序、后序遍历算法。 (3)编写主函数测试以上二叉树的创建和遍历函数。2.假设二叉树采用链式存储结构进行存储,编写程序实现二叉树的所有叶子结点的统计并输出统计个数。 四、实验结果: 五、实验中遇到的问题及解决方法: 调试的时候显示没有错误但是程序运行不出来? 在if语句中的相等要用“==”。要注意!! 六、实验心得体会: 二叉树的遍历有先序,中序,后序遍历。这三种遍历都是用递归的形式实现的。而二叉树的插入结点的算法与许多因素有关,我们要在理解二叉树结构的基础上根据需要来编写程序。我在实验中使用的二叉排序树可以作为静态查找表使用也可以作为动态查找表。附: #include front=1;rear=0;printf(“请输入二叉树的各节点,@表示虚节点,#表示节点:n”);scanf(“%c”,&ch);while(ch!='#'){ putchar(ch); s=NULL; if(ch!='@') { s=(bitree *)malloc(sizeof(bitree));s->data=ch; s->lchild=NULL; s->rchild=NULL; } rear++; Q[rear]=s; if(rear==1)root=s; else {if(s&&Q[front]) if(rear%2==0) Q[front]->lchild=s; else Q[front]->rchild=s; if(rear%2==1) front++; }scanf(“%c”,&ch);} return root;} void preorder(bitree *p){ if(p!=NULL){ printf(“%c”,p->data); preorder(p->lchild); preorder(p->rchild);} return;} void inorder(bitree *p){ if(p!=NULL){ inorder(p->lchild); printf(“%c”,p->data); inorder(p->rchild);} return;} void postorder(bitree *p){ if(p!=NULL){ postorder(p->lchild); postorder(p->rchild); printf(“%c”,p->data);} return;} int yzjd(bitree *t){ if(t==NULL)return(0);if(t->lchild==NULL&&t->rchild==NULL)return(1); return(yzjd(t->lchild)+yzjd(t->rchild));} void main(){ bitree *root;root=CREATREE(); printf(“n先序遍历结果如下:n”);preorder(root);printf(“n中序遍历结果如下:n”);inorder(root);printf(“n后序遍历结果如下:n”);postorder(root);printf(“n叶子节点的个数为:%dn”,yzjd(root)); printf(“n”);} 实验名称:实验七 查找算法实现 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 掌握各种查找算法的特点,测试并验证查找常见算法。 二、实验要求: 1、参照各种查找算法程序样例,验证给出的查找常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1.建立有序表,采用折半查找实现某一已知的关键字的查找。 2.利用折半查找算法在一个有序表中插入一个元素,并保持表的有序性。 四、实验结果: 五、实验中遇到的问题及解决方法: 六、实验心得体会: 本实验使用的是折半法查找,优点是查找效率高,在编程的时候要设置low,high,mid,分别表示区间和中间位置的值。 附: #include }; Seqlist * init()int data[MAXSIZE];int length; { } void insert(Seqlist *p){ int num=0;printf(“请输入要键入的个数:n”);if(num<1){ } int temp;for(int i=1;i length;i++) for(int j=0;j length-i;j++) if(p->data[j]>p->data[j+1]){ } temp=p->data[j];p->data[j]=p->data[j+1];p->data[j+1]=temp;printf(“请输入数据:n”);for(;num>0;num--){ } p->length++;scanf(“%d”,p->data+p->length-1);if(p->length==MAXSIZE){ } printf(“数组已满n”);break;printf(“输入个数有误n”);else Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;scanf(“%d”,&num); } getchar();int binsearch(Seqlist *p){ } void display(Seqlist *p){ } int main(void){ Seqlist *p;char flag;p=init();int i;for(i=0;i length;i++)printf(“%-5d”,p->data[i]);putchar('n');getchar();int low,high,mid,key;low=0;high=p->length-1;printf(“请输入要查找的数据:n”);scanf(“%d”,&key);getchar();while(low<=high){ } return 0;mid=(low+high)/2;if(key==p->data[mid]){ } else if(key data[mid])high=mid-1;else low=mid+1;printf(“此数据位于第%d位置n”,mid+1);return mid+1; } printf(“1-插入 2-折半法查找 3-显示 0-退出n”);while(1){ } return 0;printf(“请输入操作:”);switch(flag=getchar()){ case '1' : insert(p);break;case '2' : binsearch(p);break;case '3' : printf(“所有数据为:”);display(p);break;case '0' : free(p);return 0;} 实验名称:实验八 排序综合实验 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 参照各种排序算法程序样例,验证给出的排序常见算法。 二、实验要求: 1、掌握各种排序算法的特点,测试并验证排序的常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 输入一组关键字序列分别实现下列排序,并将上述几种排序的算法编写成菜单,根据输入的数字不同执行对应的排序算法(任选两种排序方法实现)。 1、直接插入排序。 2、希尔排序。 3、冒泡排序。 4、直接选择排序。 5、快速排序。 6、堆排序。 7、归并排序。 8、基数排序。 四、实验结果: 五、实验中遇到的问题及解决方法: 怎样实现待排序数据长度从键盘输入? 解决方法:设置一个n,从键盘输入n的值。 六、实验心得体会: 排序的常用方法有直接插入排序,简单选择排序,冒泡排序,快速排序。我在实验中用了冒泡排序和快速排序,冒泡排序的程序比较简单容易理解而快速排序则比较复杂。快速排序要先划分序列然后建立在划分基础上进行排序,这个排序是由递归实现的。但是快速排序的优点是排序比较快。附: #include Seqlist * init(){ Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;} void insert(Seqlist *p){ int num=0;printf(“请输入要键入的个数:n”);scanf(“%d”,&num);if(num<1) printf(“输入个数有误n”);else{ printf(“请输入数据:n”); for(;num>0;num--) { p->length++; scanf(“%d”,p->data+p->length-1); if(p->length==MAXSIZE) printf(“数组已满n”); } } getchar();} void bublesort(Seqlist *p){ int temp;for(int i=1;i length;i++) for(int j=0;j length-i;j++) if(p->data[j]>p->data[j+1]) { temp=p->data[j]; p->data[j]=p->data[j+1]; p->data[j+1]=temp; } } void insertsort(Seqlist *p){ int i,j,temp;for(i=1;i length;i++){ temp=p->data[i]; j=i; while(j>0&&temp data[j-1]) { p->data[j]=p->data[j-1]; j--; } p->data[j]=temp;} } void display(Seqlist *p){ int i;for(i=0;i length;i++) printf(“%-5d”,p->data[i]);putchar('n');getchar();} int main(void){ Seqlist *p,*q;char flag;p=init();q=(Seqlist *)malloc(sizeof(Seqlist));q->length=0;printf(“1-输入数据 2-直接插入排序 3-冒泡排序 4-显示 0-退出n”);while(1){ printf(“请输入操作:”); switch(flag=getchar()) { case '1' : insert(p);break; case '2' : *q=*p;insertsort(q);printf(“直接插入排序后的数据为:”);display(q);break; case '3' : *q=*p;bublesort(q);printf(“冒泡排序后的数据为:”);display(q);break; case '4' : printf(“原数据为:”);display(p);break; case '0' : free(p);return 0; } } return 0;} 计算机软件技术基础 实验报告 自动化0901班 郝万福 学号:20092395 实验1:线性表的排序与查找 目的: 掌握数据结构的基本概念、线性表的基本操作以及查找和排序方法的设计。内容: 键盘输入一组无序数据,添加到线性表中; 排序线性表并输出排序结果; 键盘输入一个数,并插入到排好序的线性表中(要求插入后的表仍为有序表),输出结果; 键盘输入一个数,并从线性表中删除相应的数据,输出结果。要求: 程序清单; 运行过程及运行结果。 实验代码: /* */ #include “stdafx.h” #include “iostream” #include // 程序实现有各种方法,这里给出一个实例。 // 定义一个线性表 const int nMaxSize = 15;// 最大值 int nLen = 0; // 定义操作 void LSort();void LOut();void LInsert(int n);void LDelete(int n); int main(){ // 输入数据并放入线性表中 printf(“Please input datan”);// std::cout << “Please input datan”;int nIn = 0; // 表中元素个数 int nLinearList[nMaxSize];班级:自动化 0901 班 姓名:郝万福 学号:20092395 编译环境: Visual Studio 2011 Windows 7 x86-64 旗舰版 } for(int i = 0;i <= 9;i++){ } LSort();// 排序线性表 LOut();// 输出结果 scanf(“%d”,&nIn);nLen++; // std::cin >> nIn; nLinearList[i] = nIn;printf(“Please input a data to insert n”);scanf(“%d”,&nIn);LInsert(nIn);LOut();printf(“Please input a data to delete n”);scanf(“%d”,&nIn);LDelete(nIn);LOut();char chTmp;printf(“Please input a char to finish this program.”);chTmp = getch();return 0;// 输入一个数字,并从线性表中删除 // 输入一个数字,并插入到线性表中 void LSort(){ } void LOut(){ // 冒泡排序,由大到小 for(int j=0;j<=10;j++){ } for(int i=0;i<11-j;i++) if(nLinearList[i] int temp=nLinearList[i];nLinearList[i]=nLinearList[i+1];nLinearList[i+1]=temp;} printf(“n”);for(int i = 0;i < nLen;i++){ } } printf(“%d, ”, nLinearList[i]);printf(“n”);void LInsert(int n){ nLen++;nLinearList[nLen] = n;for(int k=0;k<=nLen;k++){for(int l=0;l 实验结果: 实验2:栈与队列的应用 目的: 掌握栈与队列的基本概念、基本操作及设计与应用。内容: 键盘输入算数表达式,并放入队列当中; 应用栈的概念设计表达式求值算法; 输出表达式求值结果; 要求: 程序清单; 运行过程及运行结果。 要求: 实现实验内容的SQL语句,以及输出结果 为检验实验内容的有效性而执行的SQL语句,例如向数据表中插入数据; 检验运行结果(例如插入、删除)的SQL语句,以及输出的结果。 实验代码: /* */ #include “stdafx.h” #include const int MAX_LEN = 10; // 定义一个队列的结构 struct QUEUE { int nMaxSize;int nCount;int nFront;// 最大值 // 个数 // 头 // 字符串的长度 const int MAX_SIZE = 30;// 栈或队的最大元素个数 班级:自动化 0901 班 姓名:郝万福 学号:20092395 编译环境: Visual Studio 2011 Windows 7 x86-64 旗舰版 int nRear;// 尾 char szQueue[MAX_SIZE][MAX_LEN];} QQ;//定义一个栈的结构 struct STACK { // 队列的操作 void InitQueue(QUEUE *q,int nMaxSize){ } void InQueue(QUEUE *q, char *pItem){ } void OutQueue(QUEUE *q, char *pItem){ if(q->nCount == 0){ } q->nCount--;int i;printf(“队列已空n”);getch();return 0;if(q->nMaxSize == q->nCount){ } q->nCount++;int i;for(i=0;i<10;i++){ } q->nFront ++;return;q->szQueue[q->nFront][i]= pItem[i];printf(“队列已满n”);getch();return 0;q->nMaxSize=nMaxSize;q->nCount=0;q->nFront=0;q->nRear=0;int nMaxSize;int nTop;// 最大值 // 栈顶 char szStack[MAX_SIZE][MAX_LEN];} ST; } for(i=0;i<10;i++){ } q->nRear ++;return;pItem[i] = q->szQueue[q->nRear][i];//栈的操作 void InitStack(STACK *s,int nMaxSize){ } void PushStack(STACK *s, char *pItem){ } void PopStack(STACK *s, char *pItem){ if(s->nTop == 0){ } printf(“堆栈已空n”);getch();return 0;if(s->nTop == s->nMaxSize-1){ } for(int i=0;i<10;i++){ } s->nTop++;s->szStack[s->nTop][i]= pItem[i];printf(“堆栈已满n”);getch();return 0;s->nMaxSize=nMaxSize;s->nTop=0;// 栈顶 // 最大值 s->nTop--;for(int i=0;i<10;i++){ } void GetTopStack(STACK *s, char *pItem){ pItem[i] = s->szStack[s->nTop][i];} } for(int i=0;i<10;i++)pItem[i] = s->szStack[s->nTop-1][i];{ } int Priority(char *op);式的值 int main(){ int i=0; char c,temp[10]; // 声明一个队列 QUEUE qq; // 声明OS栈和NS栈 STACK ns,os; // 获得操作符的优先级 // 计算表达void Compute(char *num1, char *num2, char *op, char *chResult); InitQueue(&qq,MAX_SIZE);InitStack(&ns,MAX_SIZE);char x[MAX_LEN];char op[MAX_LEN]; // 定义扫描的表达式 // 栈顶运算符 // 运算结果 InitStack(&os,MAX_SIZE);char num1[MAX_LEN], num2[MAX_LEN];// 两个操作数 char chResult[MAX_LEN];printf(“Input expression please:n”);while((c=getchar())!='n'){ InQueue(&qq,temp);temp[0]=c;InQueue(&qq,temp);i=0; if(isdigit(c)){ } else { for(;i<10;i++){ } temp[i]=' ';temp[i++]=c; }; OutQueue(&qq, x);while(true){ if(isdigit(x[0])) // 是数 // 扫描表达式 // ;压栈 PushStack(&os,“;”);// 表达式p求值 } { PushStack(&ns,x);OutQueue(&qq, x); // 认为是运算符,没有考虑空格等 // 获得OS栈顶运算符 // 运算符的优先级〉栈顶运算符 } else { GetTopStack(&os, op);if(Priority(x)> Priority(op)) } else if(x[0]== ';' && op[0] == ';') } else if(Priority(x)<= Priority(op)) // 不大于栈顶运算符 printf(“最终的答案是%s”,chResult);break; // 扫描结束 PushStack(&os,x);OutQueue(&qq, x);{ { { PopStack(&ns,num1);PopStack(&ns,num2);PopStack(&os,op);Compute(num1, num2, op, chResult);PushStack(&ns,chResult);} } } } getch();return 0;int Priority(char *op){ } void Compute(char *num1, char *num2, char *op, char *chResult){ fNum1 = atof(num1);fNum2 = atof(num2);switch(op[0]){ case '^': fResult = pow(fNum2,fNum1);break;fResult = fNum1*fNum2;break;fResult = fNum2/fNum1;break;fResult = fNum1+fNum2;break;double fNum1,fNum2;double fResult = 0;switch(op[0]){ case '^': nPriority = 3;break;int nPriority = 0;case '*': case '/': nPriority = 2;break;case '+': case '-': } return nPriority;nPriority = 1;break;nPriority = 0;case ';': case '*': case '/': case '+': case '-': } } fResult = fNum2-fNum1;break; //把计算的结果转化为字符串 sprintf(chResult,“%.4f”,fResult);return;实验结果: 实验3:关系数据语言的应用 目的: 掌握SQL基本语句,实现数据库、表的创建,以及增删改和查询操作。内容: 创建数据库MyDB; 创建学生表Stu,内容包括:Sno、4个字符、主键,Sname、10个字符,Sex、2个字符,Age、整数,Birthday、日期型,Class、10个字符; 创建课程表Course,内容包括:Cno、2个字符、主键,Cname、10个字符,Chour、整型; 创建成绩表Score,内容包括: Sno、4个字符、主键,Cno、2个字符、主键,Grade、整型; 向各个数据表中插入多条实验数据,并查看操作后的结果; 实验环境: 操作系统: Linux Ubuntu 10.04 数据库: Mysql 5.1.62 使用字符集: utf-8 实验步骤: 1.$>mysql-u root 进入mysql 命令行。2.显示当前数据库 mysql> show databases;+----------------------+ | Database | +----------------------+ | information_schema | | mysql | | new-mato_development | | new-mato_test | +----------------------+ 4 rows in set(0.03 sec) 3.创建数据库 MyDB mysql> create database MyDB;Query OK, 1 row affected(0.02 sec) mysql> show databases;+----------------------+ | Database | +----------------------+ | information_schema | | MyDB | | mysql | | new-mato_development | | new-mato_test | +----------------------+ 5 rows in set(0.00 sec) 成功建立了数据库 MyDB。 4.创建学生表Stu mysql> create table Stu(-> Sno char(4)primary key,-> Sname char(10),-> Sex char(2),-> Age int(4),-> Birthday datetime,-> Class char(10));Query OK, 0 rows affected(0.08 sec) mysql> desc Stu;+----------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+----------+------+-----+---------+-------+ | Sno | char(4)| NO | PRI | NULL | | | Sname | char(10)| YES | | NULL | | | Sex | char(2)| YES | | NULL | | | Age | int(4)| YES | | NULL | | | Birthday | datetime | YES | | NULL | | | Class | char(10)| YES | | NULL | | +----------+----------+------+-----+---------+-------+ 6 rows in set(0.00 sec) 5.创建课程表 Course mysql> create table Course(-> Cno char(2)primary key,-> Cname char(10),-> Chour int(4));Query OK, 0 rows affected(0.06 sec) mysql> desc Course;+-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | Cno | char(2)| NO | PRI | NULL | | | Cname | char(10)| YES | | NULL | | | Chour | int(4)| YES | | NULL | | +-------+----------+------+-----+---------+-------+ 3 rows in set(0.00 sec) 6.创建成绩表 Score mysql> create table Score(-> Sno char(4)primary key,-> Cno char(2),-> Grade int);Query OK, 0 rows affected(0.05 sec) mysql> desc Score;+-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | Sno | char(4)| NO | PRI | NULL | | | Cno | char(2)| YES | | NULL | | | Grade | int(11)| YES | | NULL | | +-------+---------+------+-----+---------+-------+ 3 rows in set(0.00 sec) 7.向各个数据表中插入多条实验数据,查看操作结果。 mysql> insert into Stu values('1','Jobs','man',22,'1991-04-13','G2C2');Query OK, 1 row affected, 2 warnings(0.09 sec) mysql> insert into Stu values('2','Susan','feman',23,'1988-02-03','G2C2');Query OK, 1 row affected, 2 warnings(0.00 sec) mysql> insert into Stu values('3','Bob','man',23,'1979-01-03','G2C2');Query OK, 1 row affected, 2 warnings(0.00 sec) mysql> insert into Score values('1','1',23);Query OK, 1 row affected(0.01 sec) mysql> insert into Score values('1','2',43);Query OK, 1 row affected(0.01 sec) mysql> insert into Score values('1','3',63);Query OK, 1 row affected(0.01 sec) mysql> insert into Score values('1','4',93);Query OK, 1 row affected(0.01 sec) mysql> insert into Score values('2','1',56);Query OK, 1 row affected(0.00 sec) mysql> insert into Score values('3','1',66);Query OK, 1 row affected(0.00 sec) mysql> insert into Course values('1','G2C2',22);Query OK, 1 row affected, 1 warning(0.02 sec) 8.查询学生出生日期 mysql> select Birthday from Stu where Sno='2' OR Sname='Jobs';+---------------------+ | Birthday | +---------------------+ | 1991-04-13 00:00:00 | | 1988-02-03 00:00:00 | +---------------------+ 2 rows in set(0.00 sec) 9.按照学号顺序查询一个班级所有学生: +-------+ | Sname | +-------+ | Jobs | | Susan | | Bob | +-------+ 3 rows in set(0.02 sec) 10.列出学生选择各门课程的成绩。 mysql> select r.Grade,s.Sname,c.Cname from Score r inner join Stu s on r.Sno = s.Sno inner join Course c on c.Cname = s.Class; +-------+-------+-------+ | Grade | Sname | Cname | +-------+-------+-------+ | 23 | Jobs | G2C2 | | 56 | Susan | G2C2 | | 66 | Bob | G2C2 | +-------+-------+-------+ 3 rows in set(0.00 sec) 11.列出有过不及格成绩的学生名单 mysql> select r.Grade,s.Sname,c.Cname from Score r inner join Stu s on r.Sno = s.Sno inner join Course c on c.Cname = s.Class where r.Grade < 60;+-------+-------+-------+ | Grade | Sname | Cname | +-------+-------+-------+ | 23 | Jobs | G2C2 | | 56 | Susan | G2C2 | +-------+-------+-------+ 2 rows in set(0.01 sec) 12.求学生的平均成绩和总成绩。 mysql> select t.Sname, SUM(s.Grade)as ZCJ,AVG(s.Grade)as PJCJ from Score s inner join Stu t on t.Sno = s.Sno where Sname = 'Jobs';+-------+------+---------+ | Sname | ZCJ | PJCJ | +-------+------+---------+ | Jobs | 222 | 55.5000 | +-------+------+---------+ 1 row in set(0.00 sec) 13.找到所有成绩都在85以上的学生。mysql> select t.Sname from Stu t inner join Score s on t.Sno = s.Sno having count(s.Grade >85)= 4; Empty set(0.00 sec) 14.将课程号为01的课程改名为“软件技术” mysql> update Course set Cname = '软件技术' where Cno = 1;Query OK, 1 row affected, 1 warning(0.26 sec)Rows matched: 1 Changed: 1 Warnings: 1 +-----+------------+-------+ | Cno | Cname | Chour | +-----+------------+-------+ | 1 | 软件技术 | 22 | +-----+------------+-------+ 1 row in set(0.04 sec) 15.修改一名学生的姓名/性别/年龄 mysql> update Stu set Sname = 'Ruby',sex = 'f',Age = 31 where Sno = 3;Query OK, 1 row affected(0.03 sec)Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from Stu where Sname ='Ruby';+-----+-------+------+------+---------------------+-------+ | Sno | Sname | Sex | Age | Birthday | Class | +-----+-------+------+------+---------------------+-------+ | 3 | Ruby | f | 31 | 1978-02-03 00:00:00 | G2C2 | +-----+-------+------+------+---------------------+-------+ 1 row in set(0.00 sec) 16.将成绩为 55-59分的男生的成绩修改为60分。 mysql> update Score s inner join Stu t on t.Sno = s.Sno set s.grade = 60 where t.Sex = 'man' AND s.grade BETWEEN 55 AND 59; 17.删除90年以后,80年以前出生的学生的所有信息成绩。 mysql> DELETE FROM Stu WHERE Birthday > '1990-01-01 00:00:00' OR Birthday < '1980-01-01 00:00:00'; 18.删除一个班上的所有学生 mysql> DELETE FROM Stu WHERE Class = 'G2C2'; 19.删除所有数据表和数据库 mysql> drop table Stu;Query OK, 0 rows affected(0.08 sec) mysql> drop table Course;Query OK, 0 rows affected(0.12 sec) mysql> drop table Score;Query OK, 0 rows affected(0.02 sec) mysql> drop database MyDB;Query OK, 0 rows affected(0.27 sec) mysql> show databases;+----------------------+ | Database | +----------------------+ | information_schema | | mysql | | new-mato_development | | new-mato_test | +----------------------+ 4 rows in set(0.03 sec) 20.退出 mysql> quit Bye 《计算机软件技术基础》课程教学大纲 Introduction to Computer Software 适用专业:会计专业 学时数:32(讲课:32,课外上机:16)学分数:2 编写者:韦伟 一、课程的性质与目的 “计算机软件技术基础”是非计算机专业本科生计算机基础教学中第二层次课程,是一门有关计算机软件知识及开发技术的基础课。其内容涉及数据结构、网络、软件工程和数据库技术。通过学习该课程可以使学生系统掌握有关软件技术的概念和原理,为非计算机专业的学生今后结合本专业进行应用开发打下必要的基础。 二、课程教学内容 第一章 软件概念,程序基础(4学时)软件基本概念 Vb程序基础 面向对象基础 第二章 软件工程(4学时) 软件工程概述:软件工程概念、目标、意义,软件危机、软件生存周期及软件生存周期各阶段任务 软件需求定义 软件设计:结构化设计方法、面向对象程序设计方法 编码与测试 软件的维护及评价 课程结束后,学生应了解如何以软件工程观点开发应用软件的基本理论和方法 第三章 数据库系统基础(10学时) 基本概念:数据管理技术的发展、数据模型、数据库系统构成 关系数据库设计:关系理论、关系规范化、范式 数据库管理系统简介:客户/服务器计算模式、MS SQL SERVER 结构化查询语言SQL简介 VB数据库编程技术 课程结束后,学生了解数据库基本概念,初步掌握应用数据库系统的开发方法。 第四章 网络基础(2学时) 网络层次划分 TCP/IP协议 HTML JAVA 介绍 ASP 技术介绍 JSP 技术介绍 第五章 数据结构基础(12学时) 基本概念:数据、数据结构、算法及其评价线性结构及其应用:线性表的逻辑结构、存储结构、顺序存储、链表存储,栈、队列、数组。 树型结构:树、二叉树、树的遍历、树与二叉树的转换图:图的存储结构、邻接表、邻接矩阵、图的遍历查找算法:简单查找、树表查找、哈希查找排序:插入排序、选择排序、冒泡排序、快速排序、归并排序了解程序设计中常用数据结构及相应算法,初步掌握对不同类型的问题求解选择适当的数据结构; 三、课程教学的基本要求 课堂讲授:在多功能教室中采用电子教案讲授,课后上机练习。 作业:练习题及上机实验。 实验环境要求:服务器:Windows NT , MS SQL Server ; 客户端:Windows95或98,TC或VC、VB; 网络平台:TCP/IP。 考核方式:每学期末进行,考试主要以笔试的方式进行,实行考教分离。 四、本课程与其它课程的联系与分工 先修课程:《计算机文化基础》、《程序设计基础》、《计算机硬件基础》; 后继课程:《数据库系统技术基础》、《多媒体设计基础》、《计算机网络技术基础》; 建议选修时间为2年级下学期或3年级上学期。 五、建议教材与教学参考书 [1] 冯萍,《计算机软件技术与应用基础》,清华大学出版社 [2] 牛允鹏,《计算机等级考试教程》,电子工业出版社 呼叫中心平台基础通用性软件技术架构 12328电话系统由呼叫中心平台和电话管理系统平台组成。呼叫中心平台包括电话服务系统、短信服务系统、微信服务系统、服务监督网站、移动终端服务系统、邮件服务系统、转办受理系统、交办受理系统;电话管理系统平台包括业务处理系统、知识库系统、决策分析系统、运行管理系统。 (一)呼叫中心平台 1.电话服务系统 电话服务系统通过排队、接入、保持、录音、三方通话、外呼、转接等功能,为投诉举报、信息咨询、意见受理等业务提供电话受理渠道,并实现呼入弹屏、历史呼叫自动检索、数据项录入、知识库检索等功能。 博域通讯一体化呼叫中心平台产品BYICC2.0采用上表所述型号的呼叫中心行业主流品牌硬件作为本产品出厂时的呼叫中心系统硬件平台,从而为保障呼叫中心系统平台的电信运营商级稳定性奠定了坚实的硬件基础。采用博域通讯一体化呼叫中心平台产品BYICC2.0的呼叫中心系统硬件(专业部分)通常包括:[1]一体化CTI通讯服务器,模拟语音卡{包括通用底板,板载的功能模块如外线模块、坐席模块、内外线联合模块等,以及坐席铃流馈电电源},数字中继语音卡{支持ISDN PRI[30B+D]信令以及中国7号信令[TUP、ISUP]以及中国1号信令的呼叫接续,支持75Ω E1同轴线、100Ω T1双绞线及120Ω E1双绞线等多种阻抗的数字中继线},VoIP语音网关(VOIP语音卡){支持SIP/SDP/H.323协议},CT-BUS总线电缆等;或[2]多媒体(语音)交换机{包括交换机机架、交换机中央主控板与后出线板、交换机功能板如模拟功能板/数字中继板/VoIP功能板/Asterisk功能板以及与功能板对应的后出线板、板载模块等}。作为一站式呼叫中心解决方案与开放式的标准的呼叫中心(联络中心)系统平台,博域通讯一体化呼叫中心平台产品BYICC2.0在一台CTI通讯服务器(多媒体语音交换机)上融合了呼叫中心系统的所有常用功能,这对于降低呼叫中心系统的建设和维护成本具有重要意义;博域通讯一体化呼叫中心平台产品BYICC2.0高度的集成性和整合性极大地回避了非集成系统普遍遇到的软硬件冲突以及不同厂家的系统接口的连接和配置难题,为企业/政府机关免去了昂贵的成本、复杂的网络连接以及众多服务器和程控交换机设备,大大地降低了呼叫中心系统的建设成本。博域通讯一体化呼叫中心平台产品BYICC2.0(也称为一体化呼叫中心系统产品BYICC2.0)致力于面向广大企业和政府机构普及呼叫中心系统(Call Center)。经过大连广播电视台、深圳地铁四号线、佛山水业集团、郴州市桂东县人民政府、岳阳市公安局交通警察支队、泉州市老龄办、招远市公安局、广东江门海关、黑龙江省人民政府采购管理办公室、大理广电、威海第二热电集团、丽江数字电视、滨州市博兴县教育局、深圳华强电子世界网、广西环江电力、中青旅山水时尚酒店、广州白天鹅宾馆、盘锦市司法局、南宁海方燃气、清远市劳动和社会保障局、贵州四方鼎立、长安铃木汽车、新疆特力电信、长沙三诺生物、昭通广电、广西出入境检验检疫局、巴彦淖尔市商务局、无锡生活在线、黑龙江省柴河林业局、淄博市淄川区城市管理行政执法局、西宁市财政局、文山广电、保山广电、西双版纳广电、大同市纪委监察局、无锡市民政局、恩施自来水、寻甸县第一人民医院、深圳市司法局、荆门市农业局、大宝化工、乌兰察布市住房公积金管理中心、云南省大理市第二人民医院、福建省莆田市老龄工作委员会、辽宁省数字证书认证中心、香港昌机集团等众多企业/政府机关呼叫中心成功案例验证的博域通讯一体化呼叫中心平台产品BYICC2.0作为CTI软硬件一体化平台开机即可使用,硬件平台采用呼叫中心行业主流硬件厂商(如杭州三汇、深圳东进、广州毅航通信、上海迅时通信等)的多媒体交换机和语音板卡以及VOIP语音网关,以ALL-IN-ONE/嵌入式的方式集成并固化了PBX/ACD/IVR/CTI/数字录音/语音信箱/VOIP[支持完全分布式、远程中继和远程IP座席方式的混合应用]/TTS/电子传真/来电弹屏(Screen PopUp)/人工座席软件/短信/统计报表软件/维护管理工具软件/智能自动外拨(也称为智能自动外呼或自动批量外呼)软件/客户关系管理(CRM)/工作流(派工单流转/电子工单流转)管理/与已有计算机技术支持系统的数据接口/易学易用的软件二次开发环境以及软件二次开发的模板程序源代码(呼叫中心系统第三方开发接口)/运营管理等核心的呼叫中心功能模块,同时提供定制化软件开发技术服务。博域通讯一体化呼叫中心平台产品BYICC2.0中的交互式语音应答(IVR)流程软件BYICCIVR2.0和座席软件BYICCAgent2.0以及统计报表软件BYICCReport2.0已经内置了经过规模商用验证的通用客户关系管理(CRM)功能,通常能满足大部分最终使用部门的业务功能需求。这里提到的通用客户关系管理(CRM)功能包括客户档案信息管理,投诉建议记录管理,业务受理记录管理,业务咨询记录管理,业务查询记录管理,客户回访记录管理,电话营销管理,派工单/工作流管理,销售业务管理,和与已有计算机技术支持系统(如MIS系统/GIS系统/OA系统/ERP系统/BOSS系统等)的数据接口等。作为易于建设/部署实施、易于管理/维护、易于二次开发的高度集成的呼叫中心系统平台成熟产品,对于CRM个性化业务功能需求较少的呼叫中心系统/客户服务中心系统项目(不论系统采用SS1/ISDN PRI/SS7的数字中继线路还是模拟电话线路,不论系统配置4个座席还是64个座席或120个座席),采用博域通讯一体化呼叫中心平台产品BYICC2.0(也称为一体化呼叫中心系统产品BYICC2.0)的贵单位呼叫中心系统即装即用,在1个工作日内即可直接投入正式的商业运行。呼叫中心平台是指对各行各业的用户都适用的呼叫中心系统的通用部分,往往由专业的呼叫中心厂商提供。对于个性化应用较少的企业/政府部门,只需在呼叫中心平台上做个性化配置,呼叫中心系统就可以投入运营。对于个性化应用功能需求较多的企业/政府部门,则需要在呼叫中心平台上做二次开发,二次开发可以由系统集成商(SI)来完成,对于开发力量较强的企业/政府部门也可以自己进行二次开发。对于那些呼叫中心应用软件功能做得比较完善的高级呼叫中心平台,只需进行软件的个性化配置,而无须做二次开发。如果用户需要行业化的客户服务流程,则需外购专业的CRM(客户关系管理)软件。呼叫中心平台通过二次开发接口与专业CRM软件集成。因此,呼叫中心平台,就象房子的地基,支撑起呼叫中心系统的业务和系统负荷。呼叫中心系统的内核是以通信为基础的企业[政府机关]对内对外沟通联络系统,最具技术含量的核心部分是交换机系统PBX(Private Branch Exchange)以及CTI(计算机电信集成)系统;呼叫中心系统制造商需要依靠对通信技术的深刻理解,才能提供高稳定、高可用、高可靠的PBX系统以及CTI系统,灵活可靠地满足企业[政府机关]对于通信不断增长和变化的需求。呼叫中心中间件(即通常所讲的CTI中间件)产品是呼叫中心系统中的各种计算机系统与通信系统之间的桥梁,屏蔽了呼叫中心系统的底层通信的复杂性,为软件开发人员提供了一个简单而统一的易学易用的软件二次开发环境,减少了呼叫中心系统的程序设计的复杂性,在实施呼叫中心系统项目时将软件开发人员的注意力集中到最终用户的个性化CRM业务流程(如客户档案管理、业务咨询管理、业务查询管理、业务受理管理、投诉建议管理、客户回访与市场调查管理、工作流/工单管理、销售业务管理、与已有计算机技术支持系统[如MIS/ERP]的数据接口等)的定制开发上,从而大大减少了软件开发人员在技术上的负担。采用CTI中间件产品建设呼叫中心系统项目的显著优势包括:(1)减少呼叫中心系统项目的建设成本;(2)降低呼叫中心系统开发/实施的失败率;(3)缩短呼叫中心系统的开发周期;(4)节约呼叫中心系统的开发成本;(5)简化呼叫中心系统与已有计算机技术支持系统的集成/整合;(6)减少呼叫中心系统的维护费用;(7)提高呼叫中心系统的开发质量;(8)保证呼叫中心系统技术进步的连续性;(9)增强呼叫中心系统的生命力;(10)保护已有的投资。 2.服务监督网站 部级12328网站主要实现省级子网站导航和部级服务监督综合信息政务公开。地市级12328网站实现投诉举报业务受理、业务信息查询、政务信息公开等功能。省级不受理呼叫业务的,实现地市级子网站导航和省级服务监督综合信息政务公开;省级受理呼叫业务的,在提供地市级子网站导航和省级服务监督综合信息政务公开的同时,还需实现投诉举报业务受理、业务信息查询、政务信息公开等功能。 3.短信服务系统 12328短信平台实现投诉举报、信息咨询等业务受理和公众出行等公益信息发布,以及投诉举报处理结果告知等功能。 4.微信服务系统 实现投诉举报、信息咨询等业务受理,业务处理进展查询和结果反馈,公众出行等公益信息发布功能。 5.移动终端服务系统 移动终端APP实现投诉举报、信息咨询等业务受理,业务处理进展查询和结果反馈,公众出行等公益信息发布功能。 6.邮件服务系统 通过12328邮箱方式受理投诉举报、信息咨询等业务,自动形成业务受理工单,并通过邮件回复进行业务处理结果反馈。 7.转办受理系统 受理外单位或外部门转送的交通运输服务监督业务,实现工单生成、业务处理及结果反馈功能。 8.交办受理系统 受理上级部门交办的交通运输服务监督业务,实现工单生成、业务处理及结果反馈功能。 (二)电话管理系统平台 1.业务受理系统 业务受理系统接收电话、短信、网站、邮件、移动终端、微信等渠道受理的服务监督信息。工作人员通过业务受理系统对信息内容进行整理与记录后,按照《12328电话系统业务流程规范》填写电子表格,形成业务处理工单。 2.业务处理系统 与业务处理工作流程紧密结合,实现工单流转、催办督办、查询反馈、企业直通车、多渠道工单查重及并案处理、重大投诉举报处理等功能。 3.统计分析系统 结合对12328电话业务统计数据的挖掘整理,实现相关类型数据的同比分析、环比分析,结合管理决策的需要实现行业热点分析、行业动态预警、行业专题分析、趋势分析等功能。 4.知识库系统 知识库系统具备知识生命周期管理、多库管理、文档锁定、知识版本控制、知识导入导出、知识维护流程管理、编码管理、配置管理、系统管理等功能,能结合结构化数据和非结构化数据对图文、表格等多种类型数据知识进行采编、查询和管理。知识库系统一方面可作为一个独立系统提供信息查询服务,另一方面可通过与电话管理系统整合,结合具体业务运行数据的积累,实现相关知识信息的动态更新。 5.运行管理系统 运行管理系统实现初始化、工作流配置和权限设置等系统管理维护功能,实现电话业务系统运行监控、工作人员考试管理与绩效考核功能。第三篇:计算机软件技术基础实验报告
第四篇:《计算机软件技术基础》课程教学大纲
第五篇:呼叫中心平台基础通用性软件技术架构