文档库 最新最全的文档下载
当前位置:文档库 › 正文格式示例

正文格式示例

目录-------------------------------------------------------------------------------------------- 一.第一章两个大数相乘问题

二.第二章学生信息管理系统设计

三.第三章职工信息管理系统设计

-------------------------------------------------------------------------------------------------------------

第一章两个大数相乘问题

§1.题目描述

本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。

§2.算法设计

※①先给任意两个大数并存放在数组a[],b[]中,然后数组相乘,利用数组中数字的高低位次关系设计循环,找出相乘结果的每一项数值来并存放在数组c[]中;

②又由于上一步所得每一项数值中有多位数,再用进位关系把最后结果的每一项化成一位数;

③最后依次输出数组c[]中的每一项,注意输出顺序。

流程图:

§3.程序设计及代码分析

※※重点有两步:

第一步是初步找出相乘结果的每一项数值,设计思路是:

4 3 2 1 2 1 --------数字代表位次,数字越大位次越高

例如:数组a[4]={1,2,3,4}和b[2]={2,3}相乘所得结果每一项按照位次高低依次为:

6 5 4 3 2 ----数字代表位次,数字越大位次越高

1*2 1*3+2*2 2*3+3*2 3*3+4*2 4*3

其代码可以设计为:

char a[500],b[500];int c[500];

x=strlen(a);

y=strlen(b);

for(i=0;i

for(j=0;j

c[x-i-1+y-j-1]+=(a[i]-'0')*(b[j]-'0'); /*初步找出结果的每一项*/

第二步是把每一项化成一位数,就是用进位关系,思路比较简单,其代码为:

for(i=0;i

{

c[i+1]+=c[i]/10;

c[i]%=10;

} /*用进位关系把每一项化为一位数*/

§4.实验数据及运行效果截图

§5.设计中出现的错误及解决方法

在将算法转化为代码时,在初步找出相乘结果的每一项上的代码调试的次数比较多,在设计循环时,c[x-i-1+y-j-1]+=(a[i]-'0')*(b[j]-'0');这句代码是最难搞清楚的,后来举了一个例子,1234*23=28382,终于写出了这句代码。

第二章学生信息管理系统设计

§1.题目描述

学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:

1系统以文本菜单方式工作,

2学生信息录入功能(学生信息最好用文件保存)---输入

3学生信息浏览功能---输出

4查询、排序功能---算法

5按学号查询

6按姓名查询

7学生信息的删除与修改(可选项)

§2.算法设计

※题目二和题目三这两个信息系统的算法设计总体上是一致的,要求系统以菜单方式工作,就需要设置主菜单,来调用下面的功能菜单,这些功能菜单包括刷新,查询,修改,增加,删除,显示,保存,退出系统,其中查询可以按学号和姓名查询,删除按学号来删除。

流程图:

§3.程序设计及代码分析

※※3.1 主菜单设计:

void menu()

{

int num;

printf("\n\n中国地质大学(武汉)学生信息管理系统\n\n");

printf(" 查询前请刷新系统!\n\n");

printf(" 1.刷新学生信息 \n");

printf(" 2.查询学生信息 3.修改学生信息 \n");

printf(" 4.增加学生信息 5.按学号删信息 \n");

printf(" 6.显示当前信息 7.保存当前信息 \n");

printf(" 8.退出系统|\n\n");

printf("请选择菜单编号: ");

scanf("%d",&num);

switch(num)

{ case 0:help();break;

case 1:readfile();break;

case 2:seek();break;

case 3:modify();break;

case 4:insert();break;

case 5:del();break;

case 6:display();break;

case 7:save();break;

case 8:k=0;break;

default:printf("请在0-8之间选择\n");

}

} /*用swich-case调用八个功能子菜单*/

3.2 一共有八个子菜单,代码太多,在这里选择查询,修改两个子菜单来说明。

1. 查询:

void seek() /*查找*/

{

int i,item,flag;

char s1[21];

printf("------------------\n");

printf("-----1.按学号查询-----\n");

printf("-----2.按姓名查询-----\n");

printf("-----3.退出本菜单-----\n");

printf("------------------\n");

while(1)

{

printf("请选择子菜单编号:")

scanf("%d",&item);

flag=0;

switch(item)

{ /*用swich-case条件语句来调不同方式查询*/

case 1:

printf("请输入要查询的学生的学号:\n");

scanf("%s",s1);

for(i=0;i

if(strcmp(stu[i].code,s1)==0)

{

flag=1;

printf("学生学号学生姓名年龄性别出生年月地址电话E-mail\n");

printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age, stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

if(flag==0)

printf("该学号不存在!\n"); break;

case 2:

printf("请输入要查询的学生的姓名:\n");

scanf("%s",s1);

for(i=0;i

if(strcmp(stu[i].name,s1)==0) /*比较字符串是否相等*/ {

flag=1;

printf("学生学号学生姓名年龄性别出生年月地址电话E-mail\n");

printf("--------------------------------------------------------------------\n");

printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age, stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

if(flag==0)

printf("该姓名不存在!\n");

break;

case 3:return;

default:printf("请在1-3之间选择\n");

}

}

}

2.修改:

void modify() /*修改信息*/

{

int i,item,num;

char sex1[3],s1[16],s2[16];

printf("请输入要要修改的学生的学号:\n");

scanf("%s",s1);

for(i=0;i

if(strcmp(stu[i].code,s1)==0) /*比较字符串是否相等*/

num=i;

printf("------------------\n");

printf("1.修改姓名\n");

printf("2.修改年龄\n");

printf("3.修改性别\n");

printf("4.修改出生年月\n");

printf("5.修改地址\n");

printf("6.修改电话号码\n");

printf("7.修改E-mail地址\n");

printf("8.退出本菜单\n");

printf("------------------\n");

while(1)

{

printf("请选择子菜单编号:");

scanf("%d",&item);

switch(item)

{ /*同样用到swich-case语句依次输入所有信息

case 1:

printf("请输入新的姓名:\n"); scanf("%s",s2);

strcpy(stu[num].name,s2); break;

case 2:

printf("请输入新的年龄:\n");

scanf("%d",&stu[num].age);

break;

case 3:

printf("请输入新的性别:\n");

scanf("%s",sex1);

strcpy(stu[num].sex,sex1);

break;

case 4:

printf("请输入新的出生年月:\n");

scanf("%s",s2);

strcpy(stu[num].time,s2);

break;

case 5:

printf("请输入新的地址:\n");

scanf("%s",s2);

strcpy(stu[num].add,s2);

break;

case 6:

printf("请输入新的电话号码:\n");

scanf("%s",s2);

strcpy(stu[num].tel,s2);

break;

case 7:

printf("请输入新的E-mail地址:\n");

scanf("%s",s2);

strcpy(stu[num].mail,s2);

break;

case 8:return;

default:printf("请在1-8之间选择\n");

}

}

}

§4.实验数据及运行效果截图

§5.设计中出现的错误及解决方法

我是先做的职工信息系统,再做学生信息系统时,基本框架已经清楚,文件,数组和一些条件语句比较熟练了,但在一些函数的使用上起初还不了解,strcmp,strcpy的意义,还得查书,其他的就是琐碎的问题了,经过多次调试,还是可以做的比较完整。

第三章职工信息管理系统设计

§1.题目描述

职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能:

系统以菜单方式工作

1职工信息录入功能(职工信息用文件保存)--输入

2职工信息浏览功能--输出

3查询和排序功能:(至少一种查询方式) --算法

4按工号查询

5按学历查询等

6职工信息删除、修改功能(任选项)

§2.算法设计

※①总体上,可以设计成主菜单下辖子菜单的形式,子菜单即该职工信息管理系统包括的各种功能,包括创建,增加,修改,浏览,查询,退出这些功能。

②主菜单程序中可以用swich-case语句来调用不同的子菜单,其中查询方式有两种按工号查询和按学历查询。

流程图:

工号

学历

§3.程序设计及代码分析

※※3.1 主菜单设计:

void menu()

{ int n,w1;

do

{ printf("\t\t中国地质大学(武汉)职工信息系统\t\t\t\t\t\t\t\n");

printf("\t\t 选择功能\n\n");

printf("\t\t 1 创建新数据\n\n");

printf("\t\t 2 修改数据\n\n");

printf("\t\t 3 按学历或编号查询\n\n");

printf("\t\t 4 浏览数据\n\n");

printf("\t\t 5 增加数据\n\n");

printf("\t\t 6 退出\n\n");

printf("请选择号码(1-6):[ ]\b\b");

scanf("%d",&n);

if(n<1||n>6)

w1=1;

else w1=0;

}

while(w1==1);

switch(n)

{

case 1:enter();break;

case 2:modify();break;

case 3:search();break;

case 4:browse();break;

case 5:add();break;

case 6:exit(0);

} /*用swich-case调用六个功能子菜单*/

}

3.2 子菜单设计,由于代码太多,所以选择增加,浏览,查询这三个功能来描述。

1 增加:

add()

{

int i,n,m,k;

FILE*fp;

n=load();

printf("How many people are you want to add(0-%d)?:",N-1-n); /*增加m个人的信息*/ scanf("%d",&m);

k=m+n;

for(i=n;i

printf("\nInput %dth people record.\n",i-n+1 );

input(i);

}

if((fp=fopen("Pro.txt","ab"))==NULL)

{

printf("cannot open file\n");

}

for(i=n;i

if(fwrite(&people[i],sizeof(struct people),1,fp)!=1) /*检查输入数据是否无误*/ printf("file write error\n");

fclose(fp);

printf_back();

}

2 浏览:

browse()

{

int i,j,n;

n=load();

printf_face();

for(i=0;i

{

if((i!=0)&&(i%10==0))

{

printf("\n\nPass any key to continue ....");

getch();

puts("\n\n");

}

printf_one(i) ;

}

printf("\tThere are %d record.\n",n);

printf("\nPass any key to back ...");

getch();

menu();

}

3 查询的一部分,只介绍按学历查询,按工号查询情况类似:

search()

{

int i,n,k,w1=1,w2,w3,w4,m,a;

struct people p;

n=load();

do

{ /*两种查询方式:学历和工号*/ printf("\n\nWhich way do you want to choose? \n\t1).By xueli 2).By num [ ]\b\b");

scanf("%d",&m);

switch(m)

{

case 1: /*1.按学历查询*/ do

{ k=-1;

printf("\n\nEnter xeuli that you want to search! xueli.");

scanf("%s",p.xueli); /*输入所要查询的学历*/ printf_face();

for(i=0;i

if(strcmp(p.xueli,people[i].xueli)==0) /*输入的学历和文件信息里的学历相匹配*/

{ k=i;

printf_one(k);break;

} /*找到相应的信息并输出*/ if(k==-1)

{ printf("\n\nNO exist!please");

printf("\n\nAre you again?\n\t1).again 2).NO and back [ ]\b\b");

scanf("%d",&w1);

if(w1==2)

printf_back();

}

} while(k==-1&&w1==1);break;

§4.实验数据及运行效果截图

相关文档