C语言课设之行编辑系统.docx
《C语言课设之行编辑系统.docx》由会员分享,可在线阅读,更多相关《C语言课设之行编辑系统.docx(18页珍藏版)》请在冰豆网上搜索。
C语言课设之行编辑系统
C语言课程设计
目录
1、需求分析;
2、系统总框图;
3、每个模块的设计分析;
4、列出所有定义的函数及说明;
5、举例说明1、2个比较有特点的算法;
6、数据分析。
完备性、健壮性等;
7、存在的问题与不足及对策;
8、使用说明(操作手册);
9、学习心得
前言
计算机科学技术的发展,不仅极大地促进了整个科学技术的发展,而且明显地加快了经济信息化和社会信息化的进程。
因此,计算机教育在全国备受重视,计算机知识与能力已成为21世纪人才素质的基本要素之一。
如今,高等教育的计算机教育发展十分迅速。
十多年前,只有部分理工科专业开设计算机课程。
今天,几乎所有高校的所有专业都开设了程度不同的计算机课程。
人们已经认识到,计算机知识已成为当代知识分子知识结构中不可缺少的重要组成部分。
而除了掌握计算机的基础知识和操作的基本能力外,掌握一门高级编程语言,并可以熟练运用它,已成为当代大学生综合能力必要组成。
计算机技术发展如此迅猛,计算机应用如此广泛,需要学习的东西愈来愈多,而我们的总学时是有限的。
一般来说,计算机课程学习可以分为两部分:
一部分是理论课程学习,一部分是上机应用实习。
根据我们专业的性质和要求,则应侧重于上机操作运用。
为此,学校特意在暑期最后一星期安排了32个学时的上机实习。
现将一星期的实习内容及结果分析分列如下:
简单的行编辑器
一.题目要求
1.设置一个简单的行编辑器,每行以回车结束。
2.数据以文件形式存储。
3.编辑器具有查找,替代,修改数据的功能。
二.需求分析
根据题目要求,数据以文件的形式存储,所以应提供文件的输入,输出等操作;还需要文件具有查找,替换,修改数据的功能。
三.总体设计
根据上面的需求分析,可以将这个系统的设计分为如下七大模块:
编辑,查找,修改,,删除,替换,保存,退出。
四.详细设计
1.主函数
为了各模块的独立性,主函数一般设计得比较简单,本系统主要用主函数打开上次保存的数据和进入主菜单函数
流程图
main()
{
FILE*fp;
fp=fopen("record.txt","w");/*在C:
\DocumentsandSettings\Administrator里建立一个"record.txt"记事本*/
fclose(fp);
menu();
}
程序/*********************************主函数**
************************************/
2.主菜单函数
流程图程序
voidmenu()
{
intw,n;
do
{
clrscr();
printf("\n");
printf("\t\t*************************\n");
printf("\t\t\n");
printf("\t\t\n");
printf("\t\tWelcometothemagazineordersystem!
^_^\n");
printf("\t\t\n");
printf("\t\t\n");
printf("\t\t*************************\n");
printf("\n\n\t\t*********************************************\n\n");
printf("\t\t1:
add_new_subscriber\n");
printf("\t\t2:
browse\n");
printf("\t\t3:
statistic\n");
printf("\t\t4:
exit\n\n");
printf("\t\t*********************************************\n\n");
printf("Choiceyournumber(1-4):
[]\b\b");
scanf("%d",&n);
if(n<1||n>4)w=1;
elsew=0;
}
while(w==1);
/***************选择功能****************/
switch(n)
{
case1:
add();break;/*增加新订户记录*/
case2:
search();break;/*查找过期的订户记录并删除*/
case3:
statistic();break;/*统计*/
case4:
exit();break;/*退出*/
}
3.各功能模块函数
1)/*******************************************添加模块***************************************************/
voidadd()
{
intt,i,m;
clrscr();
t=load_record();
printf("Howmanygroupsinformationdoyouwanttoadd?
\n");
printf("Enterthenumber:
[]\b\b\b");
scanf("%d",&m);
for(i=0;i{
printf("\nInput%dthsubscriberrecord.\n",i+1);
input(t+i);/*调用输入函数*/
}
save(t+m);/*调用保存函数保存t+m组数据*/
clrscr();/**********清屏************/
menu();/*返回登陆界面*/
}
voidinput(inti)
{
printf("Pleaseinput:
\nNamesexaddressphone_numberunit_priceamounttime_imit\n");
scanf("%s%s%s%s%s%s%s",&order[i].name,&order[i].sex,&order[i].addr,&order[i].phone_number,&order[i].unit_price,&order[i].amount,&order[i].time_limit);
}
2)/*****************************************统计模块**************************************************/
statistic()
{
intt;
t=load_record();
printf("Theamountofsubscriberis[%d]\b\b\b",t);
printf_n(t);
printf("\n\n\nPressanykeytogoback...\n\n");
getch();
menu();
}
voidprintf_one(inti)/*显示一个仪器记录的函数*/
{
printf("%-10s%-5s%-10s%-11s%-4s%-3s%-10s\n\n",order[i].name,order[i].sex,order[i].addr,order[i].phone_number,order[i].unit_price,order[i].amount,&order[i].time_limit);
}
voidprintf_n(intn)/*显示n个仪器记录的函数*/
{
intj;
clrscr();/**********清屏************/
printf("Namesexaddressphone_numberpriceamounttime_imit\n\n");
for(j=0;j{
if((j+1)%10==0)/*控制显示,每屏显示10行*/
{
printf("\n\nPassanykeytocontinue...");
getch();
puts("\n\n");
}
printf_one(j);/*调用显示一个仪器记录的函数*/
}
}
3)/****************************查询模块********************************************/
voidsearch()
{
FILE*fp;
chardate[11],str[2];
intt,i,sum=0;
t=load_record();
clrscr();
printf("Pleaseinputthedate:
[]\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",date);
printf("\n");
if((fp=fopen("record.txt","w"))==NULL)/*以只写方式打开*/
{
printf("\nCannotopenfile\n");
exit(0);
}
clrscr();
printf("\n");
for(i=0;i{
if(strcmp(order[i].time_limit,date)<0)
{
sum++;
printf("\n");
printf_one(i);/**********把符合条件的记录显示出来************************/
printf("\n\nTherecordisoutofdate!
");
printf("\n\nDoyouwanttodeleteit'sinformation?
('Y'or'N'):
[]\b\b");
scanf("%s",str);;
if(strcmp(str,"Y")==0||strcmp(str,"y")==0)
continue;
}
fwrite(&order[i],sizeof(structmagazine),1,fp);
}
fclose(fp);
if(sum==0)
{
printf("***************************************************\n\n");
printf("Sorry!
Cannotfindtheequipmentwhichyouwantto.\n\n");
printf("***************************************************\n\n");
}
printf("\n\n\nPressanykeytogobacktheformerstep...\n");
getch();
menu();
}各功能模块
printf("\n\n\nPressanykeytogobacktheformerstep...\n");
1.getch();
4)退出模块
流程图
程序
voidmyexit(char(*lines)[MAXC])
{
charc;
printf("Savethelinestothefile?
(y/n)");
fflush(stdin);
c=getchar();
if(c=='n')exit
(1);
savetofile(lines);
exit
(1);
}
4公共函数
intload_record()/***加载仪器信息并计算记录仪器个数的函数***/
{
FILE*fp;
inti;
if((fp=fopen("record.txt","r"))==NULL)/*以只读方式打开*/
{
printf("\nCannotopenfile\n");
exit(0);
}
for(i=0;!
feof(fp);i++)/*从文件中读入数据并保存在结构体数组中*/
fread(&order[i],sizeof(structmagazine),1,fp);
fclose(fp);
return(i-1);
}
voidsave(intn)/*n表示保存n组数据,m表示保存在哪个文件夹里*/
{
FILE*fp;
inti;
fp=fopen("record.txt","w");/*以只写方式打开*/
if(fp==NULL)
{
printf("\nCannotopenfile\n");
exit(0);
}
for(i=0;i{
fwrite(&order[i],sizeof(structmagazine),1,fp);
}
fclose(fp);
}
综上全程序如下
#include
#definemax20
structmagazine
{
charname[11];
charsex[6];
charaddr[11];
charphone_number[12];
charunit_price[5];
charamount[4];
chartime_limit[11];
}order[max];
voidsave(intn);
intload_record();
voidsearch();
voidprintf_n(intn);
voidprintf_one(inti);
voidinput(inti);
statitic();
voidadd();
voidmenu();
main()
{
FILE*fp;
fp=fopen("record.txt","w");/*在C:
\DocumentsandSettings\Administrator里建立一个"record.txt"记事本*/
fclose(fp);
menu();
}
voidmenu()
{
intw,n;
do
{
clrscr();
printf("\n");
printf("\t\t*************************\n");
printf("\t\t\n");
printf("\t\t\n");
printf("\t\tWelcometothemagazineordersystem!
^_^\n");
printf("\t\t\n");
printf("\t\t\n");
printf("\t\t*************************\n");
printf("\n\n\t\t*********************************************\n\n");
printf("\t\t1:
add_new_subscriber\n");
printf("\t\t2:
browse\n");
printf("\t\t3:
statistic\n");
printf("\t\t4:
exit\n\n");
printf("\t\t*********************************************\n\n");
printf("Choiceyournumber(1-4):
[]\b\b");
scanf("%d",&n);
if(n<1||n>4)w=1;
elsew=0;
}
while(w==1);
/***************选择功能****************/
switch(n)
{
case1:
add();break;/*增加新订户记录*/
case2:
search();break;/*查找过期的订户记录并删除*/
case3:
statistic();break;/*统计*/
case4:
exit();break;/*退出*/
}
}
/*******************************************添加模块***************************************************/
voidadd()
{
intt,i,m;
clrscr();
t=load_record();
printf("Howmanygroupsinformationdoyouwanttoadd?
\n");
printf("Enterthenumber:
[]\b\b\b");
scanf("%d",&m);
for(i=0;i{
printf("\nInput%dthsubscriberrecord.\n",i+1);
input(t+i);/*调用输入函数*/
}
save(t+m);/*调用保存函数保存t+m组数据*/
clrscr();/**********清屏************/
menu();/*返回登陆界面*/
}
voidinput(inti)
{
printf("Pleaseinput:
\nNamesexaddressphone_numberunit_priceamounttime_imit\n");
scanf("%s%s%s%s%s%s%s",&order[i].name,&order[i].sex,&order[i].addr,&order[i].phone_number,&order[i].unit_price,&order[i].amount,&order[i].time_limit);
}
/*****************************************统计模块**************************************************/
statistic()
{
intt;
t=load_record();
printf("Theamountofsubscriberis[%d]\b\b\b",t);
printf_n(t);
printf("\n\n\nPressanykeytogoback...\n\n");
getch();
menu();
}
voidprintf_one(inti)/*显示一个仪器记录的函数*/
{
printf("%-10s%-5s%-10s%-11s%-4s%-3s%-10s\n\n",order[i].name,order[i].sex,order[i].addr,order[i].phone_number,order[i].unit_price,order[i].amount,&order[i].time_limit);
}
voidprintf_n(intn)/*显示n个仪器记录的函数*/
{
intj;
clrscr();/**********清屏************/
printf("Namesexaddressphone_numberpriceamounttime_imit\n\n");
for(j=0;j{
if((j+1)%10==0)/*控制显示,每屏显示10行*/
{
printf("\n\nPassanykeytocontinue...");
getch();
puts("\n\n");
}
printf_one(j);/*调用显示一个仪器记录的函数*/
}
}
/****************************查询模块********************************************/
voidsearch()
{
FILE*fp;
chardate[11],str[2];
intt,i,sum=0;
t=load_record();
clrscr();
printf("Pleaseinputthedate:
[]\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",date);
printf("\n");
if((fp=fopen("record.txt","w"))==NULL)/*以只写方式打开*/
{
printf("\nCannotopenfile\n");
exit(0);
}
clrscr();
printf("\n");
for(i=0;i{
if(strcmp(order[i].time_limit,date)<0)
{
sum++;
printf("\n");
printf_one(i);/**********把符合条件的记录显示出来************************/
printf("\n\nTherecordisoutofdate!
");
printf("\n\nDoyouwanttodeleteit'sinformation?
('Y'or'N'):
[]\b\b");
scanf("%s",str);;
if(strcmp(str,"Y")==0||strcmp(str,"y")==0)
continue;
}
fwrite(&order[i],sizeof(structmagazine),1,fp);
}
fclose(fp);
if(sum==0)
{
printf("***************************************************\n\n");
printf("Sorry!
Cannotfindtheequipmentwhichyouwantto.\n\n");
printf("***************************************************\n\n");
}
printf("\n\n\nPressanykeytogobacktheformerstep...\n");
getch();
menu();
}
/****************************公共函数********************************************/
intload_record()/***加载仪器信息并计算记录仪器个数的函数***/
{
FILE*fp;
inti;
if((fp=fopen("record.txt","r"))==NULL)/*以只读方式打开*/
{
printf("\nCannotopenfile\n