c语言模块化程序设计

c语言模块化程序设计,第1张

1模块化编程是指将一个庞大的程序划分为若干个功能独立的模块,对各个模块进行独立开发,然后再将这些模块统一合并为一个完整的程序。这是C语言面向过程的编程方法,可以缩短开发周期,提高程序的可读性和可维护性。

2在单片机程序里,程序比较小或者功能比较简单的时候,我们不需要采用模块化编程,但是,当程序功能复杂、涉及的资源较多的时候,模块化编程就能体现它的优越性了。如前面我们写过的HT1380驱动程序、独立按键扫描程序和12864程序,每一个程序都是只用一个源文件编写就能完成,但是,当您制作一个12864液晶日历的时候,需要用到HT1380驱动程序、独立按键扫描程序和12864显示程序,如果把这三个程序全部集中在一个源文件里,将导致主体程序臃肿且杂乱,这样做并非不可取,只是降低了程序可读性、可维护性和代码的重用率。如果把这三个程序当做三个独立的模块放到你的主体工程进行模块化编程,效果就不一样了。实际上,模块化编程就是模块合并的过程,就是建立每个模块的头文件和源文件并将其加入到主体程序的过程。主体程序调用模块的函数是通过包含模块的头文件来实现,模块的头文件和源文件是模块密不可分的两个部分,缺一不可。所以,模块化编程必须提供每个模块的头文件和源文件。

高级语言和低级语言的区别是低级语言接近机器语言层面,高级语言接近人。高级,低级 指层面,不是指难度。

C/C++语言,Fortran语言, Pascal语言,java,VB 都是 高级语言。汇编语言,机器语言 是 低级语言。

C语言是目前最流行的高级语言,学会后根据学习和工作需要,再学其它语言会很方便。很容易举一反三,快速掌握。

呵呵,就完了,晚上就给你答案哈,你多等等~~~

恩,完工了,你看看吧:

//注:本程序因涉及到引用即“&”,所以得保存为cpp的后缀名再用c++编译器进行编译

#include <stdioh>

#include <stdlibh>

#include <stringh>

#include <conioh>

#include <timeh>//用来得到当前时间

typedef struct student

{

char stuNumber[20];

char classNumber[20];

double score[10];

struct student next;

}stuNode,stuList;

void cre_node(stuList &L)//createNode,创建节点

{

int i;

L=(stuList)malloc(sizeof(stuNode));

L->next=NULL;

for(i=0;i<10;i++)

L->score[i]=0;

}

void add_node(stuList &L,char stuNumber[],char classNumber[],stuList &p)//增加节点

{

stuList q,prior;

prior=L;

p=L->next;

while(p && strcmp(classNumber,p->classNumber))

{

prior=p;

p=p->next;

}

while(p && !strcmp(classNumber,p->classNumber))

{

prior=p;

p=p->next;

}

cre_node(q);

strcpy(q->stuNumber,stuNumber);

strcpy(q->classNumber,classNumber);

q->next=prior->next;

prior->next=q;

p=q;

}

int check_list(stuList L,char stuNumber[])

{

stuList p=L->next;

while(p && strcmp(stuNumber,p->stuNumber))

p=p->next;

if(p)

{

puts("学号不能重复,请重新输入:");

return 0;

}

return 1;

}

void cre_cla_info(stuList &L)//create class infomation

{

int i=0,j=0;

char classNumber[20],stuNumber[20];

stuList p;

puts("开始创建班级信息(输入0结束):");

while(1)

{

printf("\n请输入第%d个班级班号:\n",i+1);

fflush(stdin);

gets(classNumber);

if( !strcmp(classNumber,"0"))

break;

printf("开始创建%s班的学生信息(输入0结束):\n",classNumber);

j=0;

while(1)

{

printf("请输入第%d个学生学号:\n",j+1);

fflush(stdin);

while(1)

{

gets(stuNumber);

if(check_list(L,stuNumber))

break;

}

if( !strcmp(stuNumber,"0"))

break;

add_node(L,stuNumber,classNumber,p);

j++;

}

i++;

}

p=L->next;

system("cls");

puts("班级信息为:");

while(p)

{

strcpy(classNumber,p->classNumber);

printf("%s班:\n",classNumber);

while(p && !strcmp(p->classNumber,classNumber))

{

puts(p->stuNumber);

p=p->next;

}

}

puts("\n按任意一个键继续:");

getch();

}

int get_stu_info(stuList &L,char stuNumber[],stuList &p)//get student infomation

{

char ch,classNumber[20];

p=L->next;

while(p && strcmp(stuNumber,p->stuNumber))

p=p->next;

if( !p)

{

puts("无该学生记录,你要增加该学生记录吗(是则输入Y或y,不是输入则输入其他字符):");

scanf(" %c",&ch);

if(ch=='Y' || ch=='y')

{

puts("输入该学生所在班级班号:");

fflush(stdin);

gets(classNumber);

add_node(L,stuNumber,classNumber,p);

return 2;

}

else

return 0;

}

return 1;

}

void print_cla_info(stuList &L,char classNumber[])

{

double average;

int i=0,flag=0;

char ch,stuNumber[20];

stuList p=L->next;

while(p)

{

if( !strcmp(p->classNumber,classNumber))

{

flag=1;

printf("学生%s作业完成情况为:\n",p->stuNumber);

average=0;

for(i=0;i<10;i++)

{

average+=p->score[i];

printf("第%d次:\t%g\n",i+1,p->score[i]);

}

average/=10;

printf("\n该学生期末成绩为: %g\n\n",average);

}

p=p->next;

}

if( !flag)

{

puts("无该班级信息,要创建一个吗?是输入Y或y,不是则输入其他字符:");

scanf(" %c",&ch);

if(ch=='Y' || ch=='y')

{

puts("输入该班学生学号,输入0结束:");

i=1;

while(1)

{

printf("请输入第%d个学生学号:\n",i++);

while(1)

{

fflush(stdin);

gets(stuNumber);

if(check_list(L,stuNumber))

break;

}

if( !strcmp(stuNumber,"0"))

break;

add_node(L,stuNumber,classNumber,p);

}

}

}

puts("\n按任意一个键继续:");

getch();

}

void print(void)

{

puts("请选择一个 *** 作进行(输入一个数字):\n");

puts("(1)录入某位学生某次作业的分数:\n");

puts("(2)给定学号,显示某位学生的作业完成情况:\n");

puts("(3)给定某个班级的班号,显示该班学生所有学生的作业完成情况:\n");

puts("(4)给定某位学生的学号,修改该学生的作业完成情况:\n");

puts("(5)给定某位学生的学号,删除该学生的作业完成情况:\n");

puts("(6)提供一些统计各类信息的功能:\n");

puts("输入其他数字退出:\n");

}

void count(stuList L)

{

time_t cur_time;//time_t在timeh头文件中被定义为long型

double average,m;

int n,i,flag1,flag2,sum1,sum2;

stuList p;

char classNumber[20];

cur_time=time(NULL);//得到当前系统时间

FILE fp;

fp=fopen("d:\\统计txt","a+");

fputs("\n\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n",fp);

fputs("时间格式:星期,月,日,小时:分:秒,年\n存档时间:",fp);

fputs(ctime(&cur_time),fp);

while(1)

{

system("cls");

puts("统计查询:");

puts("如若显示内容超过窗口所容,你可以到d:\\统计txt文本中查看:\n");

puts("请选择一个 *** 作进行(输入一个数字):\n");

puts("(1)显示全部班级学生作业完成情况,并显示总人数:\n");

puts("(2)显示所有满足某次作业分数不大于m的学生,并显示学生人数(m值由你输入,且范围为0~100):\n");

puts("(3)显示所有满足某次作业分数不小于m的学生,并显示学生人数(m说明同上)::\n");

puts("(4)显示满足第i次作业分数不大于m的学生,并显示人数(i范围1~10,m范围0~100):\n");

puts("(5)显示满足第i次作业分数不小于m的学生,并显示人数(i范围1~10,m范围0~100):\n");

puts("输入其他数字返回:\n");

scanf("%d",&n);

if(n<1 || n>5)

break;

p=L->next;

if(n==1)

{

system("cls");

while(p)

{

sum1=0;

strcpy(classNumber,p->classNumber);

printf("\n%s班所有学生作业完成情况为:\n",classNumber);

fprintf(fp,"\n%s班所有学生作业完成情况为:\n",classNumber);

while( p && !strcmp(classNumber,p->classNumber))

{

average=0;

printf("\n学生%s:\n",p->stuNumber);

fprintf(fp,"学生%s:\n",p->stuNumber);

for(i=0;i<10;i++)

{

average+=p->score[i];

printf("第%d次作业分数:\t%g\n",i+1,p->score[i]);

fprintf(fp,"第%d次作业分数:\t%g\n",i+1,p->score[i]);

}

average/=10;

printf("该学生期末成绩为: %g\n",average);

fprintf(fp,"该学生期末成绩为: %g\n",average);

p=p->next;

sum1++;

}

printf("\n~%s班总人数为: %d~\n",classNumber,sum1);

fprintf(fp,"\n~%s班总人数为: %d~\n",classNumber,sum1);

puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);

}

puts("\n按任意一个键继续:");

getch();

}

else if(n==2 || n==3)

{

system("cls");

puts("请输入m值(0~100):");

fputs("\n请输入m值(0~100):",fp);

while(1)

{

scanf("%lf",&m);

fprintf(fp,"%g\n",m);

if(m<0 || m>100)

{

puts("输入有误,请重新输入:");

fputs("输入有误,请重新输入:",fp);

continue;

}

break;

}

if(n==2)

{

printf("所有满足某次作业分数不大于%g的学生为:\n",m);

fprintf(fp,"所有满足某次作业分数不大于%g的学生为:\n",m);

}

else

{

printf("所有满足某次作业分数不小于%g的学生为:\n",m);

fprintf(fp,"所有满足某次作业分数不小于%g的学生为:\n",m);

}

sum2=0;

while(p)

{

strcpy(classNumber,p->classNumber);

printf("\n%s班:\n",classNumber);

fprintf(fp,"\n%s班:\n",classNumber);

flag1=0;

sum1=0;

while( p && !strcmp(classNumber,p->classNumber))

{

flag2=0;

for(i=0;i<10;i++)

if(n==2 && p->score[i] <= m)

{

flag1++;

flag2++;

if(flag2==1)

{

sum1++;

printf("\n学生%s:\n",p->stuNumber);

fprintf(fp,"学生%s:\n",p->stuNumber);

}

printf("第%d次作业分数: %g\n",i+1,p->score[i]);

fprintf(fp,"第%d次作业分数: %g\n",i+1,p->score[i]);

}

else if(n==3 && p->score[i] >= m)

{

flag1++;

flag2++;

if(flag2==1)

{

sum1++;

printf("\n学生%s:\n",p->stuNumber);

fprintf(fp,"学生%s:\n",p->stuNumber);

}

printf("第%d次作业分数: %g\n",i+1,p->score[i]);

fprintf(fp,"第%d次作业分数: %g\n",i+1,p->score[i]);

}

p=p->next;

}

if( !flag1)

{

printf("NULL:\n");

fprintf(fp,"%NULL:\n");

}

printf("\n%s班满足条件人数为:%d\n",classNumber,sum1);

fprintf(fp,"\n%s班满足条件人数为:%d\n",classNumber,sum1);

puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);

sum2+=sum1;

}

printf("\n一共满足条件人数为:%d\n",sum2);

fprintf(fp,"\n一共班满足条件人数为:%d\n",sum2);

puts("\n按任意一个键继续:");

getch();

}

else if(n==4 || n==5)

{

system("cls");

puts("输入i和m的值,用空格键分开(i:1~10,m:0~100):");

fputs("输入i和m的值,用空格键分开(i:1~10,m:0~100):",fp);

while(1)

{

scanf("%d%lf",&i,&m);

if(i<1 || i>10 || m<0 || m>100)

{

puts("输入错误,请重新输入:");

fputs("输入错误,请重新输入:",fp);

continue;

}

break;

}

if(n==4)

{

printf("所有满足第%d次作业分数不大于%g的学生为:\n",i,m);

fprintf(fp,"所有满足第%d次作业分数不大于%g的学生为:\n",i,m);

}

else

{

printf("所有满足第%d次作业分数不小于%g的学生为:\n",i,m);

fprintf(fp,"所有满足第%d次作业分数不小于%g的学生为:\n",i,m);

}

sum2=0;

while(p)

{

strcpy(classNumber,p->classNumber);

printf("\n%s班:\n",classNumber);

fprintf(fp,"\n%s班:\n",classNumber);

flag1=0;

sum1=0;

while( p && !strcmp(classNumber,p->classNumber))

{

if(n==4 && p->score[i-1] <= m)

{

flag1++;

sum1++;

printf("学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);

fprintf(fp,"学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);

}

else if(n==5 && p->score[i-1] >= m)

{

flag1++;

sum1++;

printf("学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);

fprintf(fp,"学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);

}

p=p->next;

}

if( !flag1)

{

printf("NULL:\n",classNumber);

fprintf(fp,"NULL:\n",classNumber);

}

printf("\n%s班满足条件人数为:%d\n",classNumber,sum1);

fprintf(fp,"\n%s班满足条件人数为:%d\n",classNumber,sum1);

puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);

sum2+=sum1;

}

printf("\n一共满足条件人数为:%d\n",sum2);

fprintf(fp,"\n一共班满足条件人数为:%d\n",sum2);

puts("\n按任意一个键继续:");

getch();

}

}

fclose(fp);

}

void destroy_list(stuList &L)

{

stuList p;

while(p=L->next)

{

L->next=p->next;

free(p);

}

free(L);

}

int main()

{

int m,n,i;

double average;

char stuNumber[20],classNumber[20];

stuList L,p;

cre_node(L);

cre_cla_info(L);

while(1)

{

system("cls");

print();

scanf("%d",&n);

if(n<1 || n>6)

break;

if(n==1)

{

system("cls");

puts("输入该学生学号:");

fflush(stdin);

gets(stuNumber);

if( !get_stu_info(L,stuNumber,p))

continue;

printf("该学生%s所在班级为:%s\n",p->stuNumber,p->classNumber);

puts("只录入该学生某一次的作业请输入1,要一起录入该学生10次作业请输入其他数字:");

scanf("%d",&m);

if(m==1)

{

puts("录入该学生第几次的作业");

while(1)

{

scanf("%d",&i);

if(i<1 || i>10)

{

puts("范围只能是1~10,请重新输入:");

continue;

}

break;

}

printf("该学生第%d次作业分数为:%g,你要修改为:\t",i,p->score[i-1]);

scanf("%lf",&p->score[i-1]);

puts("本次 *** 作结果:");

printf("%s班%s学生第%d次作业分数为%g:\n",p->classNumber,p->stuNumber,i,p->score[i-1]);

puts("\n按任意一个键继续:");

getch();

}

else

for(i=0;i<10;i++)

{

printf("第%d次作业分数: ",i+1);

scanf("%lf",&p->score[i]);

}

}

else if(n==2)

{

system("cls");

puts("输入该学生学号:");

fflush(stdin);

gets(stuNumber);

i=get_stu_info(L,stuNumber,p);

if( !i)

continue;

average=0;

if(i==1)

{

printf("该学生所在班级班号为:%s,10次作业完成情况为:\n",p->classNumber);

for(i=0;i<10;i++)

{

average+=p->score[i];

printf("第%d次作业分数: %g\n",i+1,p->score[i]);

}

average/=10;

printf("\n该学生期末成绩为: %g\n\n",average);

}

puts("\n按任意一个键继续:");

getch();

}

else if(n==3)

{

system("cls");

puts("输入班级的班号:");

fflush(stdin);

gets(classNumber);

print_cla_info(L,classNumber);

}

else if(n==4)

{

system("cls");

puts("输入该学生学号:");

fflush(stdin);

gets(stuNumber);

if( !get_stu_info(L,stuNumber,p))

continue;

printf("该学生所在班级班号为:%s,当前作业完成情况为:\n",p->classNumber);

for(i=0;i<10;i++)

printf("第%d次作业分数:\t%g\n",i+1,p->score[i]);

while(1)

{

puts("要修改第几次作业(输入数字1~10,输入其他数字结束):");

scanf("%d",&m);

if(m<1 || m>10)

break;

printf("修改该学生分数%g为:\t",p->score[m-1]);

scanf("%lf",&p->score[m-1]);

}

}

else if(n==5)

{

system("cls");

puts("输入该学生学号:");

fflush(stdin);

gets(stuNumber);

if( !get_stu_info(L,stuNumber,p))

continue;

printf("该学生所在班级班号为:%s,当前作业完成情况为:\n",p->classNumber);

for(i=0;i<10;i++)

printf("第%d次作业分数:\t%g\n",i+1,p->score[i]);

while(1)

{

puts("要删除第几次作业(输入数字1~10,输入其他数字结束):");

scanf("%d",&m);

if(m<1 || m>10)

break;

p->score[m-1]=0;

}

}

else

{

system("cls");

count(L);

}

}

destroy_list(L);

puts("谢谢使用!按任意键退出:");

getch();

return 0;

}

哪里不懂可追问:

以上就是关于c语言模块化程序设计全部的内容,包括:c语言模块化程序设计、C语言程序设计 与 高级语言程序设计得区别、c语言程序设计题 跪求高人的复杂版~ 慢步不要紧 主要是要对~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9536707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存