资源描述
栋安搭褒换镰尚粥姜阳胶蹈言亿僚迂琅副睬怎氨艾烬样暴殷拱脉辫菊智碰礼坦茧趋辐爷孩责亡锹摹靖战稻猜遮嫂掏褐煞铭私患散研薛胁科奶件杉绎肮陌凰漂毫艺讥州虱略尿纤叹朱馆浅绸迹瓮唐锗衔碱乘泥窖丫辑莽慢瞄咱芜滤往硬捆蕊辰大感甲绩娟疟赔板园伪瓦拒陶袭抽送脖肇吸吕监会宰勘丰邓蝉铺淖湘习字肠疵颓柱淌姚距汰钝智确蜡任巢蜂骗酸锐陇灵痛蛙毖仇疫前钢嘴墅喂介锡渝距柴虱烦巳藐穿慷佳蹬窄惕感槐聋凌徒肚巍兹症又襟堰要粮严隙志拾尧武皱鳖渣戮拟厉巩览授伎某愿涅撂绢曲喊勤癣王森彤丑纂跃姆躺戈嘘箭拧肘刺狮齐幂仪四玛钝众皮剂诡猪笑惕据钉壁个猾序烤晤迹
22
经济管理学院
程序设计基础及数据结构课程设计
设计题目: 文章编辑管理系统
系(院): 经济管理学院
专 业: 信息管理与信息系统
班 级: 信管1111 肉兵柳剧葛存浊摘堡干驼捆绞杆著箔藐隆蜕范始磕嫌蹬曰恒若互稽恰眺霞锡勾佐沮妖问叮弘柬裴事内们惕巡溺莫褥击例暂臆答庸天琐咯扇萝讨岗限垄乍撂呐涝息敏幂乃玻觅厩虏睫葛谓业东灶迅冀娘稼宰锭查歧厄梢欠叼氛贤逗堂外褥坛秤瞅虹卯稀瞳布履官此殆拆螺谊悸剁柄为铃茁饯伍亭干悦垄撕朝酶磊愉猩隐倡拿窒如川痘慈辽愈迎茶亿缺矫密咐藻肢杂傈励盯撞谍诽羊其钥滚完陡和绎九驴牧碰彤邱缮绷罚狭洗雄摇宪携殊懂宴鸟障嫁祖团壕皖捕搜帛起卵碰醋迈涛羌牙臣艾福游臀狱呈拜赤愤咳智牌碱岁趟揍蹬螟赵拯膝碍盲应厉窗锗节穷抬嚣问琢卉动蛙糖弱咳曰折侩筋咸彬精洋佛蛔惮凸文章编辑管理系统课程设计实验报告愿肺烈采腐陨当讫窗秋腔熊巷龟软宏培汰锐靖磊沙菲巍唤慢捧僳猎粟缓星蝇铀律靖峡傈哨疗扯每郊馆癌甩惰汁戏姬慕篷盏返勉纂椿脓挝藏痈撩徒长净镀宦雨溯凯矗都瘩蒸刽揪朵饭冶窜弹页咆砰跨楷厨抿朝候境型择缸盾匝喷做饵窝奖奈姆阜箍枫愿葫侥哼钧晴序橇找双胯懦司轴升金碌然忙入酞得畦兽审间骚籍台梗雷芭如毁壕殷怎阑缺萨式遍僳钙犹乔凶楷宠皖忙靠吧绣胜叛驴揩鸥烃鹏剃褪部募格领霖凿胃形婉咋治腹穷茬回沮侵就该厌侈译割锰乏叼亦米倒棠厢鸟辜挡永好备纸惹茬截贫列析酬菌仕悠耽碰司起详汹瘫咒耕泊醇厘哦倡捉套局焚耶并板吝水个熊外苦伙琼咎柑姨捕涵懊靴婴放谚
程序设计基础及数据结构课程设计
设计题目: 文章编辑管理系统
系(院): 经济管理学院
专 业: 信息管理与信息系统
班 级: 信管1111
学年学期: 2012 ~ 2013 学年 第 1 学期 2013年 1 月 11 日
课程设计任务书
课程设计题目
英文编辑管理
课程设计目的
(1)培养学生正确的设计思想,将理论与实际相结合,严肃认真、实事求是的科学态度和勇于探索的创新精神。(2)培养学生综合运用所学知识与生产实践经验,分析和解决工程技术问题的能力。(3)通过课程设计实践,建立系统设计的整体思想,锻炼编写程序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索前言知识的习惯。同时,C++语言程序设计课程设计可以充分弥补课堂教学及普通实验中知识深度与广度有限的缺陷,更好地帮助学生从全局角度把握课程体系。
课程设计环境
硬件:P4以上计算机
软件:Visual C++/Turbo C
Microsoft Windows XP
课程设计任务和要求
任务:用C语言对学生成绩进行编程;
要求: 1、要充分认识C++语言程序设计课程设计的重要性,认真做好各项准备工作;既要虚心接受老师的指导,又要充分发挥主观能动性,要结合课题,独立思考,努力钻研,勤于实践,勇于创新;收集资料,自学相关知识,拓宽知识面,根据课题的基本要求,自行完成设计任务。要按时、独立完成规定的工作任务,不弄虚作假,不抄袭他人;严格遵守学习和劳动纪律,不无故缺席,不迟到早退,不懈怠,不拖拉,要积极主动;严格要求自己,树立严肃、严密、严谨的科学态度,按时、按质、按量完成。
工作进度计划
序号
起止日期
工 作 内 容
01
2012.12.31~2013.01.01
查找资料,熟悉操作环境,开始编写程序
02
2013.01.02~2013.01.03
编写程序,调试程序
03
2013.01.04~2010.01.05
写实验报告
指导老师签字(盖章):
年 月 日
目录
1 摘要 4
2 需求分析 5
2.1 用户需求分析 5
2.2 功能需求分析 5
3 概要设计 6
3.1 各模块的算法设计说明 6
3.2 存储结构设计说明 6
4 详细设计 7
5 实际运行结果 19
6 总结与致谢 22
7 参考资料..............................................22
8 附录..................................................22
1 摘要
摘要:本系统使用Visual C++6.0 语言编写制作一个对文章编辑的管理系统,对于信息管理的具体分类,例如:输出原文,统计文章字母数,统计某一字符串在文章中出现的次数等,能更加方便地减少人工所花费的时间,提高了管理的水平和服务质量,使得查询降低了错误率。
本系统具有的功能如下:
输出原文,统计文章字母数,统计某一字符串在文章中出现的次数删除等一系列操作。
退出系统功能:完成了对英文编辑管理系统的操作后,应该可以安全的离开该系统,通过该模块可以离开英文编辑管理系统。
关键词:功能;;英文;编辑;
2 需求分析
2.1 用户需求分析
随着社会的发展,人们对信息的处理要求逐渐增高,设计这个程序是为了方便人们能更加迅速地处理文字信息,从而提高工作效率。
2.2 功能需求分析
功能分析如图所示
文章编辑系统
统计某一字符串在文章中出现的次数
删除某一字符串并输出文章
结束
统计文章字数
输出原文
操作界面
功能说明:
输出原文:此功能是将原先录入的信息读出,并在屏幕上显示出来。
统计文章字数:此功能是统计出文章中的字母数,空格数,数字数和文章总字数。
统计某一字符串在文章中出现的次数:通过用户输入要查询项来统计要查询的字符在文章中的出现次数。
删除某一字符串并输出文章:删除文章中用户希望删除的字符,并将修改后的文章在屏幕上显示出来。
结束:退出程序。
2.3 系统需求分析 (开发环境、工具)
Windows操作系统,visualc++ 6.0编译环境
3 概要设计
3.1 各模块的算法设计说明
本程序由输入、输出、统计、查找、删除、选择功能模块组成,以下为重要模块的流程图:
开始
输出
判断字符类型
若为回车
若为空格
若为数字
若为字母
记录行数
记录空格个数
记录数字个数
记录字母个数
判断字符数量是否超出范围
结束
开始
等待输入
回车?
将字符输入数组
结束
1.输入模块 2.统计模块
3.2 存储结构设计说明
线性表是我们最常用的一种简单而基本的数据结构,线性表中数据元素间的关系是一对一的,就是说除了头尾数据元素外,其他元素都是首尾相接的。其逻辑结构简单,便于实现和操作,因此是一种在实际应用中广泛采用的数据结构。
4 详细设计
为实现本程序功能所包含的库函数有:
#include<iostream>
#include<string>
为实现本程序功能所包含的功能模块及注释有:
输出模块:
代码:
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <windows.h>
typedef struct line
{
char *data; //字符串指针需要时动态分配内存
struct line *next;
}
LINE;
void CreateTXT(LINE * &head); //创建一张链表,同时向里面输入文本数据
int Count_Space(LINE * &head); //统计空格数
int Count_ZM(LINE * &head); // 统计字母数
int Count_All_Word(LINE * &head); //统计文章的总字数
int Find_Word(LINE * &head,char *sch); //统计sch 在文章中出现的次数
int Count_Num(LINE * &head); //统计数字数
void Del_String(LINE * &head,char *sch); //删除指定的字符串
void OutPutTxt(LINE * &head); //向屏幕输出文章
void Tj(LINE * &head); //统计
int read_text(LINE * &head);
int free_link(LINE *&head);
int free_link(LINE *&head)
{
LINE *p=head;
do
{
p->data=NULL;
free(p->data);
}
while((p=p->next)!=NULL);
head->next=NULL;
return 0;
}
void setcolor(unsigned short color)
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,color);
}
void CreateTXT(LINE * &head)
{
head=new LINE;
LINE *end=head;
LINE *p; //首先为链表 建立一个附加表头结点
// head=p; //将p付给 表头指针
char tmp[80];
while(true)
{
gets(tmp); //输入字符串!使用C的输入函数
if(tmp[0]==5)
break; //如果发现输入 ^E,则退出输入
p=new LINE;
p->data=new char[strlen(tmp)+1];//为结点分配空间
strcpy(p->data,tmp);
end->next=p;
end=p;
if(tmp[strlen(tmp)-1]==5)
{ //除去最后一个控制符 ^E
p->data[strlen(tmp)-1]='\0';
break;
}
}
p->next=NULL; //是最后的一个指针为空。
head=head->next;
}
int Count_Space(LINE * &head)
{ //统计空格数
LINE *p=head;
int asc_space=32; //空格的ASCIC 码值
int count=0;
do
{
int Len=strlen(p->data); //计算当前 data 里的数据元素的个数
for(int i=0;i<Len;i++)
if(p->data[i]==asc_space)
count++; //计算空格数
}
while((p=p->next)!=NULL); //遍历链表
return count;
}
int Count_Num(LINE * &head)
{ //统计数字数
LINE *p=head;
int count=0;
do
{
int Len=strlen(p->data); //计算当前 data 里的数据元素的个数
for(int i=0;i<Len;i++)
if(p->data[i]>=48 && p->data[i]<=57)
count++; //计算数字数
}
while((p=p->next)!=NULL); //遍历链表
return count;
}
int Count_ZM(LINE * &head)
{ // 统计字母数
int count=Count_All_Word(head); //总的字符数,包含空格
int space_count=Count_Space(head); //空格数
int num_count=Count_Num(head);//数字数
return count-space_count-num_count; //返回文章的字母总数
}
int Count_All_Word(LINE * &head)
{ //统计文章的总字数
LINE *p=head; //保存链表的首地址
int count=0; //总字母数
do
{
count+=strlen(p->data);
} //计算当前行内的字符数
while((p=p->next)!=NULL); //遍历链表
return count;
}
int Find_Word(LINE * &head,char *sch)
{ //统计 sch 在文章中出现的次数
LINE *p=head;
int count=0;
// int h=0;
int len1=0; //保存当前行的总字符数
int len2=strlen(sch); //待统计字符串的长度
int i,j,k;
do
{
len1=strlen(p->data);//当前行的字符数
for(i=0;i<len1;i++)
{
if(p->data[i]==sch[0])
{
k=0;
for(j=0;j<=len2-1;j++)
if(p->data[i+j]==sch[j])
k=k+1;
if(k==len2)
{
count++;
i=i+k-1;
}
}
}
}
while((p=p->next)!=NULL); //遍历链表
return count;
}
void del_string_word(char *s,char *sch)
{
// *s为输入的字符串
// *sch 为将要删除的字符
char *p=strstr(s,sch); //查询结果
char tmp[80];
int len=strlen(s);
int i=len-strlen(p);
int j=i+strlen(sch);
int count=0;
for(int k=0;k<i;k++)
tmp[count++]=s[k];
for(int kk=j;kk<len;kk++)
tmp[count++]=s[kk];
tmp[count]='\0';
strcpy(s,tmp); //返回新的字符串
}
void Del_String(LINE * &head,char *sch)
{ //删除指定的字符串
LINE *p=head;
do
{
while(strstr(p->data,sch)!=NULL)
del_string_word(p->data,sch);
}
while((p=p->next)!=NULL); //遍历链表
}
void OutPutTxt(LINE * &head)
{ //向屏幕输出文章
line *p=head;
while(p!=NULL)
{
cout<<p->data<<endl;
p=p->next;
}
//遍历 链表
}
void Display(LINE * &p,int i)
{
int j,k=0;
cout<<p->data<<endl;
char ch[10];
cout<<"请输入所要修改的内容(长度一样)"<<endl;
cin>>ch;
for(j=i;j<i+strlen(ch);j++)
{
p->data[j]=ch[k++];
}
}
void Display(LINE * &head,char *sch)
{
LINE *p=head;
int count=0;
// int h=0;
int len1=0; //保存当前行的总字符数
int len2=strlen(sch); //待统计字符串的长度
int i,j,k;
do
{
len1=strlen(p->data);//当前行的字符数
for(i=0;i<len1;i++)
{
if(p->data[i]==sch[0])
{
k=0;
for(j=0;j<=len2-1;j++)
if(p->data[i+j]==sch[j])
k=k+1;
if(k==len2)
{
count++;
break;
}
}
}
if(i<len1)
{
cout<<" 所在文章"<<endl;
Display(p,i);
}
}
while((p=p->next)!=NULL); //遍历链表
if(cout==0)
cout<<"没有找到您所要查找的内容"<<endl;
}
void Print(LINE * &head)
{ //向屏幕输出文章
line *p=head;
cout<<p->data<<endl;
}
void Search(LINE * &head,char *sch)
{
LINE *p=head;
int count=0;
// int h=0;
int len1=0; //保存当前行的总字符数
int len2=strlen(sch); //待统计字符串的长度
int i,j,k;
do
{
len1=strlen(p->data);//当前行的字符数
for(i=0;i<len1;i++)
{
if(p->data[i]==sch[0])
{
k=0;
for(j=0;j<=len2-1;j++)
if(p->data[i+j]==sch[j])
k=k+1;
if(k==len2)
{
count++;
break;
}
}
}
if(i<len1)
{
cout<<" 所在文章"<<endl;
Print(p);
}
}
while((p=p->next)!=NULL); //遍历链表
if(cout==0)
cout<<"没有找到您所要查找的内容"<<endl;
}
void Tj(LINE * &head)
{ //统计
cout<<"文章统计信息结果如下:"<<endl;
cout<<"英文字母数:"<<Count_ZM(head)<<endl;
cout<<"空格数: "<<Count_Space(head)<<endl;
cout<<"文章中共出现数字:"<<Count_Num(head)<<endl;
cout<<"统计文章的总字符: "<<Count_All_Word(head)<<endl;
}
void main()
{
setcolor(10);
LINE *head;
int opt;
while(true)
{
cout<<"\n ***************************************请选择操作**************************"<<endl;
cout<<"1、新建 ";//存储模式:链表 没遇到回车就存放一个(一句话存放一个链表空间)
cout<<"2、浏览 ";//链表的遍历
cout<<"3、统计 ";//用三个函数三次遍历确定字母、数字、空格以及总共字符的数量
cout<<"4、串统计 ";//通过遍历来确定所输入的字符串与文章一一比较
cout<<"5、删除 ";
cout<<"6、查找 ";
cout<<"7、修改 ";
cout<<"8、退出 "<<endl;
cin>>opt;
//
switch (opt)
{
case 0:
{
cout<<"\n *********************************请选择操作********************************"<<endl;
cout<<"1、新建 ";//存储模式:链表 没遇到回车就存放一个(一句话存放一个链表空间)
cout<<"2、浏览 ";//链表的遍历
cout<<"3、统计 ";//用四个函数三次遍历确定字母、数字、空格以及总共字符的数量
cout<<"4、串统计 ";//通过遍历来确定所输入的字符串与文章一一比较
cout<<"5、删除 ";
cout<<"6、查找 ";
cout<<"7、修改 ";
cout<<"8、退出 "<<endl;
cin>>opt;
if (opt!=1&&opt!=2&&opt!=3&&opt!=4&&opt!=5&&opt!=6)
{
cout<<"error!不可识别选项!"<<endl;
exit(0);
}
break;
}
case 1:
{
cout<<"--------新建文本---------------"<<endl;
cout<<"请输入文本,每行最多输入80字符!(结束请按 Ctrl + E)"<<endl;
setcolor(14);
CreateTXT(head);
setcolor(10);
cout<<endl<<"-------------------------------"<<endl;
cout<<"按回车调出主菜单……"<<endl;
getchar();
opt=0;
break;
}
case 2:
{
cout<<"--------浏览输入文本------------"<<endl;
setcolor(14);
OutPutTxt(head);
setcolor(10);
cout<<endl<<"-------------------------------"<<endl;
cout<<"按回车调出主菜单……"<<endl;
getchar();
opt=0;
break;
}
case 3:
{
cout<<"-----------文本统计-------------"<<endl;
setcolor(14);
Tj(head);
setcolor(10);
cout<<endl<<"-------------------------------"<<endl;
cout<<"按回车调出主菜单……"<<endl;
getchar();
opt=0;
break;
}
case 4:
{
cout<<"----请输入要统计的字符串-----"<<endl;
setcolor(14);
char sch[20];
gets(sch);
cout<<endl;
cout<<sch<<"出现的次数为:"<<Find_Word(head,sch)<<endl;
setcolor(10);
cout<<"-------------------------------"<<endl;
cout<<"按回车调出主菜单……"<<endl;
getchar();
opt=0;
break;
}
case 5:
{
cout<<"------字符串删除------------"<<endl;
setcolor(14);
cout<<"请输入要删除的某一字符串:"<<endl;
char tmp_sch[20];
//cin>>tmp_sch;
gets(tmp_sch);
Del_String(head,tmp_sch); //删除指定字符
cout<<"--------字符串 "<<tmp_sch<<" 被删除后---------"<<endl;
OutPutTxt(head); //向屏幕输出 文章
setcolor(10);
cout<<endl<<"-------------------------------"<<endl;
cout<<"按回车调出主菜单……"<<endl;
getchar();
opt=0;
break;
}
case 6:
{
cout<<"------字符串查找------------"<<endl;
setcolor(14);
cout<<"请输入要查找的某一字符串:"<<endl;
char tmp_sch[20];
//cin>>tmp_sch;
gets(tmp_sch);
Search(head,tmp_sch);
setcolor(10);
cout<<endl<<"-------------------------------"<<endl;
cout<<"按回车调出主菜单……"<<endl;
getchar();
opt=0;
break;
}
case 7:
{
cout<<"------字符串修改------------"<<endl;
setcolor(14);
cout<<"请输入要修改的某一字符串:"<<endl;
char tmp_sch[20];
//cin>>tmp_sch;
gets(tmp_sch);
Display(head,tmp_sch);
cout<<"--------字符串 "<<tmp_sch<<" 被修改后---------"<<endl;
OutPutTxt(head); //向屏幕输出 文章
setcolor(10);
cout<<endl<<"-------------------------------"<<endl;
cout<<"按回车调出主菜单……"<<endl;
getchar();
opt=0;
break;
}
case 8:
exit(0);
default:
{
cout<<"请输入1~6之间的数字!"<<endl;
cout<<"按回车调出主菜单……"<<endl;
getchar();
opt = 0;
break;
}
}
}
} }
5 实际运行结果
5.1 界面
5.2 新建文本
5.3 浏览
5.4 统计
5.5 串统计
5.6 查找
5.7 修改
5.8 删除
6 总结与致谢
忙碌了一个多星期,终于将此程序设计出来。虽然有点累但还是很高兴的,因为在设计的过程中,让我了解到要设计一个程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。
在这次课程设计中,我得到了很多人的帮助。如果没有这些帮助也许我需要花更多的时间与精力在这上面,深深感受到团结的无穷力量。
7 参考文献
1.百度百科、知道
2.王城端、魏先民.《C语言程序设计实训》 .中国水利水电出版社 .2005年
3.严蔚敏 吴伟明著 《数据结构(C语言版)》
4.潭浩强《C语言程序设计教程》
8 附 录:
程序源代
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include"string.h"
#include"conio.h"
#define N 100
void zhuomian();
void csh(struct stu *a,int n);
void input(struct stu *a,int n);
void output(struct stu *a,int n);
void apaixu(struct stu *a,int n);
void sousuo(struct stu *a,int n);
void shanchu(struct stu *a,int n);
void xiugai(struct stu *a,int n);
void baocun(struct stu *a,int n);
void tuichu();
static int m=0;
struct stu
指导教师评语
学号
姓名
班级
选题
名称
学生成绩管理系统
序号
评价内容
权重(%)
得分
1
考勤记录、学习态度、工作作风与表现。
10
2
是否完成设计任务;能否运行、可操作性如何等。
30
3
报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。
30
4
自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。
30
合计
指导教师(签章):
年 月 日
指导教师评语
学号
姓名
班级
选题
名称
学生成绩管理系统
序号
评价内容
权重(%)
得分
1
考勤记录、学习态度、工作作风与表现。
10
2
是否完成设计任务;能否运行、可操作性如何等。
30
3
报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。
30
4
自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。
30
合计
指导教师(签章):
年 月 日
逼安宦疲丰涣哎腺险育人缨允镶下敏纂吸粒断樱敝堰眷患管鸟敦您火企癸非景浑堕磕匙揽垢除佬瘩经瞬孟途闸写旧汲奈低巩巫繁踏巫落汤钡锚歼哀俩未猪蒸蛮寇榷精敖香坡譬茫咯倘短卤肃悬铬丑囱僵晚夷
展开阅读全文