第一篇:C语言课程设计——家庭财务管理系统[小编推荐]
课程设计报告
课程设计题目: 家庭财务管理系统
学生姓名:
专
业: 信息工程 班
级:
指导教师:
2018年
1月
8日
1.需求分析
根据家庭账务管理的需要,建立一个“家庭账务管理系统”,以方便对家庭日常收入及支出进行记录和管理。该系统要求:①家庭月收入管理②家庭月支出管理③统计家庭总收入/总支出④系统提供收入/支出的添加、删除和修改功能。
2.总体设计
根据以上分析,本家庭账务管理系统主要包括: ①从键盘键入家庭月收入、月支出数据; ②查询月收入、月支出明细; ③删除收入、支出数据; ④修改收入、支出数据; ⑤统计总收入/总支出; ⑥退出系统。
除main()函数之外,系统还定义了以下函数来实现各部分内容: ①add_income():添加收入数据函数。②add_payout():添加支出数据函数。③search_data():查找数据函数。
④initialize():初始化函数,读取文本数据。⑤show_info():显示数据函数。⑥count_total():统计函数,统计总收入、总支出。⑦update_data():修改信息函数。⑧delete_data():删除数据函数。⑨quit():退出函数。程序结构功能图如下:
3.详细设计
3.1收入管理
3.2支出管理
4.测试结果
4.1 程序运行主菜单
4.2 添加收入测试
4.3 查询收入明细测试
4.4 删除收入测试
4.5 修改收入测试
4.6 添加支出测试
4.7 查询支出明细测试
4.8 删除支出测试
4.9 修改支出测试
4.10 统计总收入/支出测试
4.11 退出系统测试
软件操作使用说明书
本系统采用命令行对话方式进行操作,运行后出现主界面(如下图所示),然后按照主界面菜单指引操作即可。
6.总结
编写程序之前要有一个整体的思路,不能写到哪里算哪里。这样很容易遗漏,连续性也不好。通过本次的课程设计让我对于数组、文件的存放、循环结构等知识有了更加透彻的理解。希望在以后的课程设计中对于知识的运用能够更加的熟练。
代码:
#include
//自定义枚举类型fi_type,用来表示收入与支出 typedef enum _fi_type { income=1,//收入 payout =-1 //支出 } fi_type;// 家庭财务信息结构体 typedef struct _fi_info { int year;int month;fi_type type;char name[9];float money;char detail[11];}fi_info;
// 存储财务数据结构的结构体 typedef struct _fi_data { fi_info info;struct _fi_data* next;} fi_data;fi_data *head;//财务数据的头结点 void menu();//菜单函数 void add_income();void search_income();void delete_income();void update_income();void add_payout();void search_payout();void delete_payout();void update_payout();void count_total();void quit();// void search_data(fi_type type);void delete_data(fi_type type);void update_data(fi_type type);// void initialize();void save_to_file();void clear_data();fi_data *get_last();fi_data *get_previous(fi_data *p);void input_info(fi_info *info);void show_info(fi_data *p);void menu(){ printf(“n”);printf(“tt ~~~~~~~~~~~~~~~~~~~~~~n”);printf(“tt ~~~~~~~~~~~~~~~~~~~~~~n”);printf(“ttt 家庭财务管理系统n”);printf(“tt ~~~~~~~~~~~~~~~~~~~~~~n”);printf(“tt ~~~~~~~~~~~~~~~~~~~~~~n”);printf(“tt*******************************************n”);printf(“tt收入管理:”);printf(“1.添加收入”);printf(“ 2.查询收入明细n”);printf(“ttt 3.删除收入”);printf(“ 4.修改收入n”);printf(“tt*******************************************n”);printf(“tt支出管理:”);printf(“5.添加支出”);printf(“ 6.查询支出明细n”);printf(“ttt 7.删除支出”);printf(“ 8.修改支出n”);printf(“tt*******************************************n”);printf(“tt统 计:”);printf(“9.统计总收入/总支出n”);printf(“tt*******************************************n”);printf(“tt退 出:0.退出系统n”);printf(“tt*******************************************nnn”);} void main(){ int selected=0;initialize();while(selected>=0&&selected<=9){ system(“cls”);menu();printf(“tt>请选择要进行的操作(0-9):”);if(scanf(“%d”,&selected)!=1||selected<0||selected>9){ printf(“tt>输入有误!请选择(0-9)之间的数字!按任意键重试”);getchar();} else { switch(selected){ case 0:exit(0);clear_data();break;case 1:add_income();save_to_file();break;case 2:search_income();break;case 3:delete_income();save_to_file();break;case 4:update_income();save_to_file();break;case 5:add_payout();save_to_file();break;case 6:search_payout();break;case 7:delete_payout();save_to_file();break;case 8:update_payout();save_to_file();break;case 9:count_total();break;} }
} } void add_income()//添加收入 { fi_data *p=(fi_data *)malloc(sizeof(fi_data));p->next=NULL;input_info(&(p->info));p->info.type=income;if(head==NULL)head=p;else get_last()->next=p;} void add_payout()//添加支出 { fi_data *p=(fi_data *)malloc(sizeof(fi_data));p->next=NULL;input_info(&(p->info));p->info.type=payout;if(head==NULL)head=p;else get_last()->next=p;} //输入函数
void input_info(fi_info *info){ printf(“tt>请输入年月(YYYY/M)”);scanf(“%d/%d”,&(info->year),&(info->month));printf(“tt>请输入家庭成员姓名(最大长度为%d):”,MAXNAME-1);scanf(“%s”,info->name);printf(“tt>输入金额:”);scanf(“%f”,&(info->money));printf(“tt>请输入备注(最大长度为%d):”,20);scanf(“%s”,info->detail);}
//查找数据函数
void search_data(fi_type type){ int year=0;int month=0;fi_data *p=NULL;int count=0;char input=' ';while(1){ printf(“tt>请输入要查询的年月(YYYY/M)”);if(scanf(“%d/%d”,&year,&month)!=2){ printf(“tt>输入有误n”);} else { p=head;count=0;while(p!=NULL){ if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type)){ show_info(p);system(“PAUSE”);count++;} p=p->next;} if(count==0){ printf(“tt>没有找到数据n”);} printf(“tt>继续查找其他数据?(y or n)”);input=getchar();if(input=='y'||input=='Y')continue;else break;} } } //初始化函数,读取文本数据 void initialize(){ FILE * fp=NULL;fi_data *p=NULL;fi_data *last=NULL;int count=0;fp=fopen(“data.txt”,“rb”);if(fp==NULL){ fp=fopen(“data.txt”,“w”);fclose(fp);return;} p=(fi_data*)malloc(sizeof(fi_data));memset(p,0,sizeof(fi_data));p->next=NULL;while(fread(&(p->info),sizeof(fi_info),1,fp)==1){ if(head==NULL)head=p;else { last=get_last();last->next=p;} count++;fseek(fp,count*sizeof(fi_info),SEEK_SET);p=(fi_data *)malloc(sizeof(fi_data));memset(p,0,sizeof(fi_data));p->next=NULL;} free(p);p=NULL;fclose(fp);} //显示信息函数 void show_info(fi_data *p){ int i=0;printf(“|tt|tt|tt|tt|tt|tt|n”);printf(“|NO.t |年/月tt|类型tt|姓名tt|金额tt|备注tt|n”);
printf(“|%5dt|%4d/%02dt|%4st|%10st|%10.2f|%20s|n”,i+1, p->info.year,p->info.month,p->info.type==income?“收入”:“支出”, p->info.name,p->info.money,p->info.detail);printf(“|tt|tt|tt|tt|tt|tt|n”);} //统计总收入、总支出 void count_total(){ float total_income=0.0;float total_payout=0.0;fi_data *p=head;while(p!=NULL){ if(p->info.type==income){ total_income+=p->info.money;} else { total_payout+=p->info.money;} p=p->next;} printf(“tt+tt+tt+n”);printf(“tt|合计收入t|合计支出t|结余t|n”);
printf(“tt%12.2f|%12.2f|%12.2f|n”,total_income,total_payout,total_income-total_payout);printf(“tt+tt+tt+n”);printf(“tt>按任意键返回主菜单”);getchar();getchar();} //保存到文件
void save_to_file(){ FILE *fp=fopen(“data.txt”,“wb”);fi_data *p=head;while(p!=NULL){ fwrite(&(p->info),sizeof(fi_info),1,fp);fseek(fp,0,SEEK_END);p=p->next;} fclose(fp);} //修改信息函数
void update_data(fi_type type){ int year=0;int month=0;fi_data *p=NULL;fi_data *pre=NULL;char input;int count=0;int i=0;while(1){ printf(“tt>请输入要查询的年月(YYYY/M)”);if(scanf(“%d/%d”,&year,&month)!=2){ printf(“tt>输入有误n”);} else { p=head;count=0;while(p!=NULL){ if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type)){ count++;show_info(p);input_info(&(p->info));printf(“tt修改成功n”);p=get_previous(p);}
p=p->next;} if(count==0)printf(“tt>没有找到数据n”);printf(“tt>继续查找其他数据?(y or n)”);input=getchar();if(input=='y'||input=='Y')continue;else break;} } } void delete_data(fi_type type)//删除数据函数 { int year=0;int month=0;fi_data *p=NULL;fi_data *pre=NULL;int count=0;char input=' ';int i=0;while(1){ printf(“tt>请输入要查询的年月(YYYY/M)”);if(scanf(“%d/%d”,&year,&month)!=2){ printf(“tt>输入有误n”);} else { p=head;count=0;while(p!=NULL){ if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type)){ count++;show_info(p);pre=get_previous(p);if(pre==NULL)head=head->next;else pre->next=p->next;free(p);printf(“tt>删除成功n”);} p=p->next;} if(count==0)
printf(“tt>没有找到数据n”);printf(“tt>继续查找其他数据?(y or n)”);input=getchar();if(input=='y'||input=='Y')continue;else break;} } } void clear_data()//清空链表数据 { fi_data *p=NULL;while(head!=NULL){ if(head->next!=NULL){ p=head;head=head->next;free(p);p=NULL;} else { free(head);head=NULL;} } } fi_data *get_last(){ fi_data * p=head;if(p==NULL)return p;while((p!=NULL)&&(p->next!=NULL))p=p->next;return p;} fi_data *get_previous(fi_data *p){ fi_data *previous=head;while(previous!=NULL){ if(previous->next==p)break;previous=previous->next;} return previous;} void search_payout(){ search_data(payout);} void delete_payout(){ delete_data(payout);} void update_payout(){ update_data(payout);} void search_income(){ search_data(income);} void delete_income(){ delete_data(income);} void update_income(){ update_data(income);}
第二篇:C语言课程设计火车票系统源代码
#include
//编号// char name[20];
//起点和终点// char time[5];
//出发时间// int price;
//车票价格// int amount;
//剩余数量// struct Node *next;}Node;//创建链表并输入数据// struct Node *creat(){ struct Node *head,*r,*s;
int i=0;
char choice;
head=(struct Node *)malloc(sizeof(struct Node));head->next=NULL;r=head;do {
s=(struct Node *)malloc(sizeof(struct Node));s->next=NULL;printf(“请输入第%d种火车票的信息:n”,++i);printf(“请输入火车的编号:”);
scanf(“%d”,&s->num);
printf(“起点和终点:”);scanf(“%s”,s->name);printf(“出发时间:”);scanf(“%s”,s->time);printf(“车票价格:”);scanf(“%d”,&s->price);printf(“剩余数量:”);scanf(“%d”,&s->amount);
r->next=s;
r=s;
printf(“Continue?(Y/N)”);scanf(“%s”,&choice);}while(choice=='Y'||choice=='y');
r->next=NULL;return(head);} //将单链表中的信息保存到文件1.txt中// void save(struct Node *h){
struct Node *s;FILE *fp;
char filename[10]=“1.txt”;
fp=fopen(“1.txt”,“wt”);if(fp==NULL){
printf(“n写文件出错,按任意键退出!”);getchar();exit(1);}
for(s=h->next;s!=NULL;s=s->next)
fprintf(fp,“%d %s %s %d %d n”,s->num,s->name,s->time,s->price,s->amount);
getchar();fclose(fp);} // 从文件1.txt中读取信息并存入单链表中// struct Node *read(){ struct Node *head,*r,*s;FILE *fp;char filename[10]=“zl.txt”;fp=fopen(“1.txt”,“rt”);if(fp==NULL){
printf(“读文件错误,按任意键退出!”);getchar();exit(1);} head=(struct Node *)malloc(sizeof(struct Node));head->next=NULL;r=head;while(!feof(fp)){
s=(struct Node *)malloc(sizeof(struct Node));fscanf(fp,“%d %s %s %d %d”,&s->num,s->name,s->time,&s->price,&s->amount);
r->next=s;r=s;
} r->next=NULL;fclose(fp);
return head;} //将链表中的数据输出// void print(struct Node *h){
struct Node *s;
printf(“n火车票信息如下:n”);
printf(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“编号
起点和终点
出发时间
车票价格
剩余票数:n”);
for(s=h->next;s->next!=NULL;s=s->next){ printf(“ %d
%10s
%5s %10d %6dn”,s->num,s->name,s->time,s->price,s->amount);} } //链表查询// struct Node * find(struct Node *h){ int i,j;char s[20];printf(“tt
查询方法有以下几种:n”);printf(“tt
1.火车票编号n”);printf(“tt
2.起点和终点n”);printf(“tt
3.出发时间n”);printf(“tt
4.车票价格n”);printf(“tt
5.剩余票数n”);printf(“请输入您要查询的方法的序号:”);scanf(“%d”,&i);switch(i){ case 1:printf(“请输入你要查询火车票的编号:”);scanf(“%d”,&j);
while(h->next!=NULL)
{
h=h->next;
if(h->num==j)return h;
}
return NULL;break;case 2:printf(“请输入您要查询火车票的起点和终点:”);scanf(“%s”,s);while(h->next!=NULL){
h=h->next;if(strcmp(h->name,s)==0)
return h;
} return NULL;break;case 3:printf(“请输入您要查询火车票的时间:”);
scanf(“%s”,s);
while(h->next!=NULL)
{
h=h->next;
if(strcmp(h->time,s)==0)
return h;
}
return NULL;
break;case 4:printf(“请输入你要查询火车票的价格 :”);scanf(“%d”,&j);
while(h->next!=NULL)
{
h=h->next;
if(h->price==j)
return h;
}
return NULL;
break;case 5:printf(“请输入你要查询火车票的剩余票数:”);scanf(“%d”,&j);
while(h->next!=NULL)
{
h=h->next;
if(h->amount==j)
return h;
} return NULL;
break;} } //修改信息// change(struct Node *h,int k){ int j;struct Node *p;p=find(h);printf(“------------n”);printf(“t
您要修改哪一项?n”);printf(“t
1.火车编号n”);printf(“t
2.起点和终点n”);printf(“t
3.出发时间n”);printf(“t
4.车票价格n”);
printf(“t
5.剩余票数n”);printf(“t
0.退出系统n”);
printf(“------------n”);printf(“请输入您要修改项的编号:”);scanf(“%d”,&j);switch(j)
{ case 1:
printf(“修改后的火车编号:”);
scanf(“%d”,&p->num);
break;
case 2:
printf(“修改后的起点和终点:”);
scanf(“%s”,p->name);
break;
case 3:
printf(“修改后的出发时间:”);
scanf(“%s”,p->time);
break;
case 4:
printf(“修改后的车票价格:”);
scanf(“%d”,&p->price);
break;
case 5:
printf(“修改后的剩余票数:”);
scanf(“%d”,&p->amount);
break;
case 0:break;} } //删除信息// delete(struct Node *h){ struct Node *p;
int j;
printf(“请输入您要删除的火车票的编号:”);scanf(“%d”,&j);p=h->next;
if(p==NULL)
return 0;while(p!=NULL){ if(p->num==j){
h->next=p->next;
free(p);
return 1;} h=p;p=p->next;
} return 0;} //添加信息// void append(){
struct Node *p;
FILE *fp;
fp=fopen(“1.txt”,“at+”);
if(fp==NULL)
{
printf(“写文件出错,按任意键返回.n”);getchar();exit(1);
}
printf(“请输入要添加的火车票的信息:火车编号,起点和终点,出发时间,车票价格,剩余票数:n”);scanf(“%d%s%s%d%d”,&p->num,p->name,p->time,&p->price,&p->amount);fprintf(fp,“%d %s %s %d %dn”,p->num,p->name,p->time,p->price,p->amount);getchar();fclose(fp);} //数据的统计// void count(struct Node *h){ struct Node *s;s=h;int i,j,k,n=0;printf(“*****************************************************************************n”);
printf(“tt
请选择您要统计项目的序号:n”);
printf(“tt
1.车票价格n”);
printf(“tt
2.剩余票数n”);printf(“tt
0.退出界面n”);
scanf(“%d”,&i);switch(i)
{
case 1:
printf(“请输入您要统计车票的价格的标准:”);
scanf(“%d”,&j);
printf(“tt
请选择低于或高于标准:n”);
printf(“tt
1.价格低于%d的个数n”,j);
printf(“tt
2.价格高于%d的个数n”,j);
scanf(“%d”,&k);
if(k==1)
{
for(s=h->next;s->next!=NULL;s=s->next)
if(s->price n++; printf(“车票价格低于%d的个数有%d个.n”,j,n); } else { for(s=h->next;s->next!=NULL;s=s->next) if(s->price>j) n++; printf(“车票价格低于%d的个数有%d个.n”,j,n); } break; case 2: printf(“请输入您要统计剩余票数的数量:”); scanf(“%d”,&j); printf(“tt 请选择低于或高于所输票数:n”); printf(“tt 1.票数低于%d的个数n”,j); printf(“tt 2.票数高于%d的个数n”,j); scanf(“%d”,&k); if(k==1) { for(s=h->next;s->next!=NULL;s=s->next) if(s->amount n++; printf(“剩余票数低于%d的个数有%d个.n”,j,n); } else { for(s=h->next;s->next!=NULL;s=s->next) if(s->amount>j) n++; printf(“剩余票数高于%d的个数有%d个.n”,j,n); } break; case 0:break; } } //保存用户和密码到文件2.txt中// void save_user(){ char file[10]=“2.txt”;FILE *fp;char name[20];char pwd[10];fp=fopen(“2.txt”,“at+”);if(fp==NULL){ printf(“n写文件出错,按任意键退出.n”); getchar();exit(1);} printf(“请输入用户名:”); scanf(“%s”,name);printf(“请输入密码:”); scanf(“%s”,pwd); fprintf(fp,“%s %sn”,name,pwd); getchar(); fclose(fp); printf(“用户注册成功!n”);} //检验用户和密码是否匹配// int check(char *name,char *pwd){ char name1[20];char pwd1[10];FILE *fp;char file[10]=“2.txt”;if((fp=fopen(“2.txt”,“rt”))==NULL){ printf(“读文件出错,按任意键退出!n”); getchar(); exit(1);} while(!feof(fp)){ fscanf(fp,“%s %s”,name1,pwd1); if(strcmp(name1,name)==0&&strcmp(pwd1,pwd)==0) return 1;} return 0;} //数据排序// void sort(struct Node *h){ struct Node *s,*p,*m,*n;int t,t1,t2,t3;char s1[20];char s2[10]; printf(“车票价格由小到大排序如下:n”);for(s=h->next;s->next!=NULL;s=s->next)for(p=s->next;p->next!=NULL;p=p->next) if(s->price>p->price) { t1=s->num;s->num=p->num;p->num=t1; t2=s->price;s->price=p->price;p->price=t2; t3=s->amount;s->amount=p->amount;p->amount=t3; strcpy(s1,s->name);strcpy(s->name,p->name);strcpy(p->name,s1); strcpy(s2,s->time);strcpy(s->time,p->time);strcpy(p->time,s2); } print(h);printf(“nn剩余车票数量由多到少排序如下:n”);for(s=h->next;s->next!=NULL;s=s->next) for(p=s->next;p->next!=NULL;p=p->next) if(s->amount amount) { t1=s->num;s->num=p->num;p->num=t1; t2=s->price;s->price=p->price;p->price=t2; t3=s->amount;s->amount=p->amount;p->amount=t3; strcpy(s1,s->name);strcpy(s->name,p->name);strcpy(p->name,s1); strcpy(s2,s->time);strcpy(s->time,p->time);strcpy(p->time,s2); } print(h);} void main(){ struct Node *head,*p;int i,j,k;head=(struct Node *)malloc(sizeof(struct Node));head->next=NULL;char name[20];char pwd[10];printf(“n***************欢迎进入火车票管理系统******************n”);printf(“tt 1.用户登录n”);printf(“tt 2.用户注册n”);printf(“tt 0.退出系统 n”);printf(“请输入所选序号:”);scanf(“%d”,&k); switch(k){ case 1: printf(“请输入用户名:”); scanf(“%s”,name); printf(“请输入密码:”); scanf(“%s”,pwd); if(check(name,pwd)) { printf(“密码正确.n”); do { printf(“nntt*********************欢迎进入火车票管理系统***********************n”); printf(“tt 1.录入火车票信息tt 2.添加火车票信息n”); printf(“tt 3.修改火车票信息tt 4.删除火车票信息n”); printf(“tt 5.打印火车票信息tt 6.查询火车票信息n”); printf(“tt 7.统计火车票信息tt 8.火车票销售排行n”); printf(“tt 0.退出系统n”); printf(“请输入您要进入菜单的序号(0-8):”); scanf(“%d”,&i); switch(i) { case 1: printf(“请录入火车票信息nn”); head=creat(); save(head); head=read(); break; case 2: append(); break; case 3: printf(“请输入您要修改的火车票的编号:”); scanf(“%d”,&j); change(head,j); save(head); break; case 4: head=read(); if(delete(head)) { printf(“已正确删除!n”); save(head); } else printf(“要删除的结点不存在!n”); break; case 5: head=read(); print(head); break; case 6: printf(“请输入您要查询火车票的编号(以0结束):”); scanf(“%d”,&j); { p=find(head); printf(“编号 起点和终点 出发时间 车票价格 剩余票数:n”); printf(“%d %10s %5s %10d %6dn”,p->num,p->name,p->time,p->price,p->amount); printf(“请继续输入序号(以0结束):”); scanf(“%d”,&j); } break; case 7: head=read();count(head);break; case 8: sort(head);break; case 0: printf(“************************用!*****************************n”);break; } }while(i!=0); } else printf(“密码错误或用户名不存在.n”); break;case 2:save_user();break;case 0:break;} 谢 谢 使 1、课程设计的目的、任务 《汇编语言》课程设计对于巩固汇编语言理论知识,加强学生的实际动手能力和提高学生综合素质十分必要。课程设计的目的主要是通过程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。 2、软件需求分析和设计 2.1学生成绩管理系统是对学生成绩的管理,其中包括以下几个模块:(1).插入一个数据(插入学生学号以及语数外三个成绩)。(2)修改一个数据。(3)删除学生成绩数据。(4)查找学生成绩。(5)查看学生成绩的排名(6)查看学生成绩分布(7)按esc键退出系统 2.2学生成绩管理系统应该包含以下信息:学号,语文成绩,英语成绩,数学成绩。因此,系统应该提供以下功能:(1)输出显示菜单。(2)输入学生的成绩(3)修改学生成绩(4)删除学生成绩(5)查询学生成绩(6)显示学生成绩排名(7)显示成绩分布统计(8)按esc键退出系统 2.3依据程序的功能需求,该系统的功能结构图如下 系统功能结构图 2.4 程序流程图: 主程序流程图 查找学生成绩 插入学生学号及成绩 修改学生的成绩 显示各个学科各分数段的人数 3、程序实现说明 3.1学生管理系统中各子程序如下: (1).输入全部学生学号以及语文,英语,数学三科的成绩。子程序名:insert 子程序描述:该子程序为输入字程序。系统在开始的时候是没有数据的,通过该子程序可以初始化系统,将学生的学号及成绩输入系统。 代码: insert proc near;定义进程子程序:插入学生,学号及 成绩 call input;调用input add n,1 ret insert endp (2).修改输入的成绩。子程序名:modify 子程序描述:通过子程序修改学生的成绩 代码: modify proc near;定义进程子程序:修改学生学号,成绩 md1:output mess1;输出mess1 shuru;调用宏shuru:二位数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si];先查找输入的学生是否存在 je qq1_1;查到的话,就跳转到qq1_1输入修改的值,也就是重新输入。;结果相等则跳转到qq1_1 add si,1 cmp si,bx jbe md;小于等于则跳转到md output mess;输出mess jmp md1;不相等继续输入学号 qq1_1:;转入修改的值重新输入。mov di,si output mess2 output mess4 mov si,0 mov cx,3 qq3_1:shuruu;cmp dx,78h; jbe qq2_1;output ts3;jmp qq1_1;qq2_1:mov buf[si],dl output bg;add si,1 loop qq3_1 mov al,buf[0];mov chi[di],al mov al,buf[1] 分别输入语文,英语,数学成绩,并将其放 在缓冲区buf中 比较输入的成绩是否大于120,如果大于120的 话,那么重 新输入成绩 小于等于则转移到qq2_1 输出ts3 跳转到qq1_1 输出空格 将存入buf中的成绩,分别赋值给存放对应科 目的成绩的数组 mov eng[di],al mov al,buf[2] mov mat[di],al ret modify endp (3).删除学生的成绩。子程序名:delete 子程序描述:通过子程序删除学生的成绩 代码: de proc near;删除某个学生的记录 sc1:output mess1 shuru;调用宏shuru,接受输入的学号 mov bl,n mov bh,0 mov al,dl mov si,0 sc: cmp al,xh[si];查询输入学号的学生信息是否存在,不存在的话,重新输入学号 je sc2;相等则转移到sc2 add si,1 cmp si,bx jbe sc;小于等于则转移到sc output mess;输出mess jmp sc1 sc2: sub bx,si cmp bx,0 je sc3;相等则转移到sc3 mov cx,bx sc4:mov dl,chi[si+1] mov chi[si],dl mov dl,eng[si+1] mov eng[si],dl mov dl,mat[si+1] mov mat[si],dl mov dl,xh[si+1] mov xh[si],dl add si,1 loop sc4;loop循环指令,执行操作(cx)<--(cx)-1.若 cx!=0,跳转到标号sc处循环执行;cx=0,则推出 循环,执行loop的下一条指令 sub n,1 sc3: ret de endp (3).查询学生的成绩。子程序名:find 子程序描述:通过子程序查询学生的成绩 代码: find proc near;定义进程子程序:查找学生成绩 call sum;求学生的总成绩 call ping;求学生的平均成绩 bj1:output mess1;输出mess1 shuru;二位数数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 bj: cmp al,xh[si];将输入的学号与输入的学号相比,je i;存在的话,将此学生的成绩输出。je表示结果相 等则转移。add si,1 cmp si,bx jbe bj;output mess jmp bj1 i: output strr2 shuzi xh[si];shuzi output bg;mov al,chi[si] cbw;shuzii ax;shuzii output bg;mov al,eng[si] cbw;shuzii ax;shuzii output bg mov al,mat[si] cbw shuzii ax output bg; mov al,pj[si] cbw 小于等于则转移到bj 为二位数据输出 输出空格 将字节变为字 为三位数据输出。输出空格 将字节变为字 为三位数据输出 输出空格的字符串,用于与标题栏对齐 shuzii ax output bg mov ax,si mov bl,2 mul bl mov bx,ax shuzii zc[bx];shuzii为三位数据输出 output bg;输出空格的字符串,用于与标题栏对齐 shuzi mc[si];shuzi为二位数据输出 ret find endp (4).显示学生的成绩排名。子程序名:show 子程序描述:通过子程序显示学生的成绩排名 代码: show proc near;定义进程子程序:显示结果排名 call sum;调用宏sum call ping;调用宏ping call rank;调用宏rank call shuchu;调用宏shuchu ret show endp 3.2程序运行抓图: 主菜单 修改学生成绩 删除学生成绩 显示各个学科各分数段的人数 4、程序总结 通过两个星期的学习,努力,终于完成了报告。系统可以很好的运行。这两个多星期的时间,几乎每天不是在敲代码,就是在看代码,查书,上网。系统中用到了很多最近才学习的知识,比如宏,子程序。这些都使得代码的运行效率提高了,代码行数减少了。系统还用到了bios的清屏功能。这些功能如果不是做课程设计,我想我很难会接触到这些知识。 由于自己对知识掌握的不是很牢固,其中也会碰到一些困难。每当遇到问题的时候,我会先上网去查找,看看有没有人提过这方面的问题。互联网是强大的,大部分的问题通过网络都可以解决。部分找不到的问题,我就去请教班里学得好的同学。他们对知识的掌握远超过我。这样下来,很多问题都迎刃而解了。 课程设计是一个很好的掌握书本上知识的过程。平时上课之后,自己都不会想着去敲一些代码联系联系。通过做课程设计,将理论与实践结合了起来,对知识的理解更加深入了。 题目 一、学生选课管理系统 第一部分:课程设计名称、目的、要求 第二部分:程序总体设计思路 第三部分:程序功能划分、图示及流程图 第四部分:程序设计数据、运行结果 第五部分:程序的优缺点 第六部分:心得体会 第七部分:附录(源程序) 第八部分:附录(参考文献) 目录 ..............................................................................第一部分:课程设计名称、目的、要求 名称:学生选修课程系统设计 目的:运用C语言提高解决实际问题的能力 实验环境:Microsoft Visual C++ 6.0 内容: 假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。【功能】 系统以菜单方式工作 课程信息录入功能(课程信息用文件保存)--输入 课程信息浏览功能--输出 查询功能:(至少一种查询方式)--算法 按学分查询 按课程性质查询 学生选修课程(可选项) 第二部分:程序总体设计思路 由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。 具体的设计思路如下: 程序的要求是设计学生选修课管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。首先,考虑到程序的数据输入,可以设置一个管理员登陆选项,通过该选项进入管理员界面,进行选修课的录入和修改操作,最后将录入的课程保存到相应的文件中。然后定义各种函数的功能包括查看,查询,删除等。另一个为学生登陆界面,该界面学生可以进行课程选择和浏览查询等操作。在进行该操作之前需要对管理员保存的文件进行读取,然后对其中的内容进行查询等,在学生选好课程以后,可以将其选好的课程保存于相应的文件中,以便下次进行修改。通过函数的层层调用来实现程序的逻辑结构。中间通过文件的打开和关闭实现对文件内部所包含的数据的操作。 整个程序的设计思路到此结束。 第三部分:程序功能划分、图示及流程图 【功能模块划分及其流程图】 本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6个部分分别编写,程序主体功能将由这9个部分来完成。这9个部分依次是: 1.登录界面函数;void login()2.学生登录界面据函数:void stu_login()3.管理员登录界面函数:void man_login()4.退出界面函数:void bye_sys() 5.课程选择函数:void c_select()6.课程浏览函数:void c_view()7.课程查询函数:void c_search()8.课程增加函数:void c_add()9.课程删除函数:void c_delete()10.菜单函数:void index()11.主函数部分; main() 总体设计: 学生选课系统管理员登录学生登录新增课程删除课程课程浏览查询课程学生选课课程浏览课程查询c_add函数c_delete函数c_view函数c_search函数c_select函数c_view函数c_search函数 系统功能模块图 部分函数流程图: 1、课程选择函数: 开始输入要选择的课程的编号j=0;j 2、课程查询函数 开始输入要查询的课程的编号j=0;j 3、课程增加函数 开始输入要增加的课程的编号j=0;j 4、课程删除函数 开始输入要删除的课程的编号nj=0;j 本程序是一款应用软件,故数据设计、程序运行结果应在程序的 运用中得以体现,现在通过一个程序的运用事例来对程序运行结果进行演示与实现。【软件运用举例】 1、程序开始界面如下: 选择某个选项,如进行管理员登录,进行课程的增加 进入管理员界面: 2、再选择所要进行的操作,如进行课程增加,结果如下: 下面可以进行继续增加课程或者退出: 3、选择课程浏览,可以分页查看相应的课程信息: 第一页: 第二页: 4、课程查询 查找结果: 4、管理员课程删除操作: 删除后可以进行浏览,观察删除后的结果: 可见删除后只有一条记录。删除操作完成正确。下面进行学生操作的使用方法: 1、学生登陆界面: 2、选择学生选课选项: 3、学生登陆也可进行课程浏览和查询函数,其结果与管理员登陆相同,不再演示。 第五部分:程序的优缺点 【程序的优点】 算法是程序的灵魂,程序的优点首先表现在算法上的优点,其次才是功能上的。 [算法上的优点]主要体现在以下三点: 1.程序采用main主函数方式设计,程序的主体的功能大都由该功能 完成。程序如此设计有利于程序的进一步改进及有助于程序执行效率的提高。 2.程序对文件数据的读写采用了fread和fwrite块读写函数,能够将文件中的数据完全读出,然后赋到定义的数组中,再在相应的数组中进行一系列操作,最终再写入文件。 3.插入操作在本程序中将课程信息直接插入数组最后一个节点,从而减少了数据的相互移动,节省了时间。 [功能上的优点] 主要体现在以下两点: 1. 简洁明了的程序菜单。程序主要采用了层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。2. 人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地看懂程序并进行操作。 【程序的缺点】 主要表现在以下两点: 1、本程序没有进行相应的密码操作,所以对于使用者来说可能存在比较大的不保密性。需要改善。 2、本程序没有使用文本读写函数fscanf和fprintf,所以的到的课程文件和选课文件都是二进制形式。 第六部分:心得体会 选课系统程序比起通讯录程序来讲好写一些,由于本程序用到了数组,对于数组的操作掌握的比较熟练,所以在编写程序的时候困难没有那么多。 本程序在编写的过程中用到了许多通讯录中的模块化设计和函数互相调用的思想,使得编写比较方便和好用。 通过该系统的课程设计分析,我掌握了模块化设计的方法,理解和运用了结构化程序设计的思想和方法,掌握和提高了运用C语言进行程序设计的能力。 程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常叫做流程,在程序设计过程中理清楚整个问题的流程很重要,然后采取逐步细化的方法实现整个程序。 对于一个较大的应用程序,一般不可能一次就设计出一个很完善的系统。通常要先设计满足基本要求的系统,然后再测试或者在使用的过程中不断完善,慢慢地做成一个功能很完善选修课程管理系统。所以在进行调试的时候需要对许多变量理解和掌握其变化规律等,这对于我更好的掌握visual C中调试的工具有很大的帮助。 总之经过这次课程设计,我对c语言的使用和理解都有了很大的加深,对于编程的思想也有了很多新的理解和感受。 第七部分:附录 一、参考文献: 1、李丽娟主编,C语言程序设计教程(第二版),人民邮电出版社 2、严蔚敏主编,数据结构(C语言),清华大学出版社 3、崔单主编,C语言程序设计案例精粹,电子工业出版社 4、谭浩强主编,程序设计(第三版),清华大学出版社 二、源程序 #include“stdio.h” #include“stdlib.h” #include“windows.h” #include“string.h” void index();//首页 void login();void bye_sys();//退出界面 void stu_login();//学生登录菜单 void c_select();void c_view();//课程浏览 void c_add();//增加课程 void c_delete();void c_searchs();//学生查询函数 void c_searchm();//管理员查询函数 void c_viewm();//管理员浏览函数 void c_views();//学生浏览函数 struct course//定义课程结构体 { int c_num; char c_name[20]; int c_score; int c_nelepeo;//课程已选人数 int c_melepeo;//课程人数上限 };struct student { char s_number[10]; char s_password[10];};struct manager { char m_name[10];char m_password[10];}; void index()//首页 { char input; printf(“nnttt*****************************n”); printf(“ttt 湖南大学学生选课系统n”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt**********设计者:刘晓斌******nnn”); input=getchar(); system(“cls”);} void login()//登陆界面 { void stu_login(); void man_login(); void bye_sys(); int input; do { system(“cls”); printf(“nnnt1.学生登录n”); printf(“t2.管理员登陆n”); printf(“t3.退出本系统n”); printf(“t请选择服务类别:”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3)//输入数不等于选项的时候打印画面 { printf(“nt输入出错!请重新选择~n”); printf(“nt按任意键返回选择页面~nt”); getchar();getchar(); system(“cls”); } if(input==3)//如果输入3退出系统 { bye_sys(); } }while(input!=1&&input!=2&&input!=3); switch(input) { case 1:stu_login();break; case 2:man_login();break; } } void bye_sys()//退出界面 { exit(0);} void man_login(){ void c_add(); void c_delete(); void c_view(); void c_searchm(); int in; do { system(“cls”); printf(“nnt1.新增课程n”); printf(“t2.删除课程n”); printf(“t3.课程浏览n”); printf(“t4.课程查询n”); printf(“t5.退出n”); printf(“nnt请选择服务种类:”); scanf(“%d”,&in); if(in!=1&&in!=2&&in!=3&&in!=4&&in!=5) { printf(“nt没有这项服务t按任意重新选择”); getchar();getchar(); } }while(in!=1&&in!=2&&in!=3&&in!=4&&in!=5); switch(in) { case 1:c_add();break; case 2:c_delete();break; case 3:c_viewm();break; case 4:c_searchm();break; case 5:login();break; } } void stu_login()//学生登录菜单 { void c_select(); void c_view(); void c_searchs(); void login(); int input; do { system(“cls”); printf(“nnnt--学生登陆--”); printf(“nnt1.学生选课n”); printf(“t2.课程浏览n”); printf(“t3.课程查询n”); printf(“t4.退出n”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3&&input!=4) { printf(“nt没有这项服务~n”); printf(“t按任意键重新选择”); getchar(); getchar(); } }while(input!=1&&input!=2&&input!=3&&input!=4); switch(input) { case 1:c_select();break; case 2:c_views();break; case 3:c_searchs();break; case 4:login();break; } } void c_select(){ int n,in,i=0,j;int flag=0; FILE *fp; FILE *fp1; char input; struct course courses[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程 { printf(“nnnt课程不存在nn”); printf(“t<按任意键返回管理菜单>nt”); input=getchar(); input=getchar(); stu_login();//进入学生登陆菜单 } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件读完后关闭 } printf(“nntt请输入你要选课程的编号:”); scanf(“%d”,&n); if((fp1=fopen(“courseselect.dat”,“rb”))==NULL) { fp1=fopen(“courseselect.dat”,“wb”); } else { fclose(fp1); fp1=fopen(“courseselect.dat”,“ab”); } for(j=0;j if(courses[j].c_num==n) flag++; if(flag==0) { printf(“nntt不存在对应课程n”); printf(“nntt继续选课请按1,退出请按2:n”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default: printf(“输入错误,将返回登录界面!n”); login();break; } } else { fwrite(&courses[j],sizeof(struct course),1,fp1); fclose(fp1); printf(“nntt选课成功t请选择:”); printf(“nntt1.继续选课”); printf(“nntt2.退出,返回登录界面!”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default:break; } } } void c_viewm()//课程浏览 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程 { system(“cls”); printf(“nnnt课程不存在nn”); printf(“t<按任意键返回管理菜单>nt”); getchar();getchar(); stu_login();//进入学生登陆菜单 } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件读完后关闭 do { system(“cls”); if(i==1) { printf(“nnnttt没有记录!n”); getchar();getchar(); man_login(); } else { printf(“nt------共有%d条记录-------”,i-1); printf(“nnt课程编号: %dn”,courseview[n].c_num); printf(“nnt课程名字: %sn”,courseview[n].c_name); printf(“nnt课程学分: %dn”,courseview[n].c_score); printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo); printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一页t2.下一页t3.回目录”); printf(“n请选择:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到达首页 t按任意键返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到达尾页t按人意见返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{man_login();break;} default: { printf(“nt操作错误t按任意键返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_views()//课程浏览 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程 { system(“cls”); printf(“nnnt课程不存在nn”); printf(“t<按任意键返回管理菜单>nt”); getchar();getchar(); stu_login();//进入学生登陆菜单 } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件读完后关闭 do { system(“cls”); if(i==1) { printf(“nnnttt没有记录!n”); getchar();getchar(); stu_login(); } else { printf(“nt------共有%d条记录-------”,i-1); printf(“nnt课程编号: %dn”,courseview[n].c_num); printf(“nnt课程名字: %sn”,courseview[n].c_name); printf(“nnt课程学分: %dn”,courseview[n].c_score); printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo); printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一页t2.下一页t3.回目录”); printf(“n请选择:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到达首页 t按任意键返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到达尾页t按人意见返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{stu_login();break;} default: { printf(“nt操作错误t按任意键返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_searchs(){ void stu_login(); void c_searchs(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判断课程信息是否存在 { system(“cls”); printf(“nnt课程不存在t按任意键返回”); getchar();getchar(); stu_login(); } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt请输入你要查询的课程编号:”); scanf(“%d”,&id); do//检查输入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt课程编号:%dn”,coursesear[k].c_num); printf(“nnt课程名字:%sn”,coursesear[k].c_name); printf(“nnt课程学分:%dn”,coursesear[k].c_score); printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo); printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在对应记录n”); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } }while(inp!=1); } void c_searchm(){ void stu_login(); void c_searchm(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判断课程信息是否存在 { system(“cls”); printf(“nnt课程不存在t按任意键返回”); getchar();getchar(); stu_login(); } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt请输入你要查询的课程编号:”); scanf(“%d”,&id); do//检查输入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt课程编号:%dn”,coursesear[k].c_num); printf(“nnt课程名字:%sn”,coursesear[k].c_name); printf(“nnt课程学分:%dn”,coursesear[k].c_score); printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo); printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在对应记录n”); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } }while(inp!=1);} void c_add()//增加课程 { void c_add(); void man_login(); int i=0,j,inp; FILE *fp; struct course course_new; struct course courses[10]; system(“cls”); printf(“nntt请输入课程信息”); printf(“nntt1.课程编号:”); scanf(“%d”,&course_new.c_num); printf(“nntt2.课程名字:”); scanf(“%s”,course_new.c_name); printf(“nntt3.课程学分:”); scanf(“%d”,&course_new.c_score); printf(“nntt4.课程已选人数:”); scanf(“%d”,&course_new.c_nelepeo); printf(“nntt5.课程人数上限:”); scanf(“%d”,&course_new.c_melepeo); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); for(j=0;j<=i-1;j++) if(course_new.c_num==courses[j].c_num) { system(“cls”); printf(“nnttt对不起,这个编号已经使用过nntt按任意键返回管理菜单”); getchar();getchar(); man_login(); break; } } if((fp=fopen(“course.dat”,“rb”))==NULL) { fp=fopen(“course.dat”,“wb”); } else { fclose(fp); fp=fopen(“course.dat”,“ab”); } fwrite(&course_new,sizeof(struct course),1,fp); fclose(fp); printf(“nntt信息输入完毕t按任意键继续”); getchar();getchar(); do { system(“cls”); printf(“nntt1.继续输入”); printf(“nntt2.返回管理菜单”); printf(“nntt请选择”); scanf(“%d”,&inp); if(inp!=1&&inp!=2) { printf(“输入不符合要求t按任意键重新选择”); getchar();getchar(); } }while(inp!=1&&inp!=2); switch(inp) { case 1:c_add();break; case 2:man_login();break; } } void c_delete()//查询后删除 { FILE *fp; int i=0,j,n,k,flag=0; struct course courses[10]; void c_delete(); void man_login(); printf(“nntt请输入你要删除的课程编号:”); scanf(“%d”,&n); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } else { printf(“nntt不存在任何课程t按任意键返回”); getchar();getchar(); man_login(); } for(j=0;j { if(courses[j].c_num==n) { flag=1; fp=fopen(“course.dat”,“wb”); for(k=0;k fwrite(&courses[k],sizeof(struct course),1,fp); fclose(fp); fp=fopen(“course.dat”,“ab”); for(k=j+1;k { fwrite(&courses[k],sizeof(struct course),1,fp); } printf(“nntt记录已删除!t按任意键返回ntt”); getchar();getchar(); man_login(); fclose(fp); } } if(flag==0) { printf(“nntt不存在对应的课程t按任意键返回”); getchar();getchar(); man_login(); } // printf(“nntt记录已删除!t按任意键返回ntt”); } int main(){ index();login();return 0;} C语言课程设计 仓库管理系统 #include struct cangku { int num; char name[20]; char introdution[50]; float square; };typedef struct cangku Cangku; int Input(Cangku t[]);void List(Cangku t[],int n);void SearchOnName(Cangku t[],int n);int DeleteRecord(Cangku t[],int n);int AlterRecord(Cangku t[],int n);int AddRecord(Cangku t[],int n);void SortOnName(Cangku t[],int n);void SortOnSquare(Cangku t[],int n);void SaveRecord(Cangku t[],int n);int LoadRecord(Cangku t[]);int LoadRecord1(Cangku t[]);void Save(Cangku t[],int n);void Load(Cangku t[],int n);void Load1(Cangku t[]);int Menu_select(); void main(){ Cangku ck[50];int i,l,length,w=1;int q[4]={5,2,1,0}; system(“cls”);printf(“请输入第1个密码:n”);for(i=0;i<4;i++) { scanf(“%d”,&l); system(“cls”); if(l==q[i]) printf(“正确,继续输入第%d个密码:.n”,i+2); else { w=0; printf(“输入错误!n”); break; } } while(w) { switch(Menu_select()) { case 1: length=Input(ck); SaveRecord(ck,length); break; case 2: length=LoadRecord(ck); SearchOnName(ck,length); break; case 3: length=LoadRecord(ck); length=DeleteRecord(ck,length); SaveRecord(ck,length); break; case 4: length=LoadRecord(ck); length=AlterRecord(ck,length); SaveRecord(ck,length); break; case 5: length=LoadRecord(ck); length=AddRecord(ck,length); SaveRecord(ck,length); break; case 6: length=LoadRecord(ck); system(“cls”); List(ck,length); break; case 7: length=LoadRecord(ck); system(“cls”); SortOnName(ck,length); SaveRecord(ck,length); break; case 8: length=LoadRecord(ck); system(“cls”); SortOnSquare(ck,length); SaveRecord(ck,length); break; case 9: length=LoadRecord(ck); system(“cls”); Save(ck,length); break; case 0: length=LoadRecord1(ck); Load1(ck); system(“cls”); Load(ck,length); break; case 10: exit(0); } } } int Menu_select(){ int c; printf(“按任意键进入仓库管理菜单n”); getchar(); system(“cls”); system(“color F0”);printf(“ ******************************仓库管理*******************************n”); printf(“ * 1.录入仓库初始记录 *n”); printf(“ * 2.按仓库名称查找记录 *n”); printf(“ * 3.删除仓库记录 *n”); printf(“ * 4.修改仓库记录 *n”);printf(“ * 5.增加仓库信息 *n”); printf(“ * 6.显示全部记录 *n”); printf(“ * 7.按仓库名称排序 *n”); printf(“ * 8.按仓库面积排序 *n”); printf(“ * 9.备份 *n”);printf(“ * 0.恢复 *n”);printf(“ * 10.退出 *n”); printf(“ *********************************************************************n”);do { printf(“n输入您想要进行的操作选项键(0-10):”); if(scanf(“%d”,&c)!=1) { while(getchar()!='n') continue; } } while(c<0||c>10);return c;} int Input(Cangku t[]){ int i,n; system(“cls”); printf(“n请输入要输入的仓库数目:n”); scanf(“%d”,&n); printf(“开始输入仓库信息:n”); for(i=0;i { system(“cls”); printf(“n第%d个仓库的编号:”,i+1); scanf(“%d”,&t[i].num); printf(“第%d个仓库的名称:”,i+1); scanf(“%s”,t[i].name); printf(“第%d个仓库的面积:”,i+1); scanf(“%f”,&t[i].square); printf(“第%d个仓库的说明:”,i+1); scanf(“%s”,t[i].introdution);} return(n);} void List(Cangku t[],int n){ int i; printf(“ *********************************************************************n”); printf(“ ** 编号 名称 面积 说明n”); printf(“ -------n”);for(i=0;i printf(“%17d%13s%20f%14sn”,t[i].num,t[i].name,t[i].square,t[i].introdution);} printf(“ *********************************************************************n”); printf(“n”);getchar();} void SearchOnName(Cangku t[],int n){ char s[20]; int i,flag=0; system(“cls”); printf(“请输入要查找的仓库名称:n”); scanf(“%s”,s); for(i=0;i { if(strcmp(s,t[i].name)==0) { flag=1; system(“cls”); printf(“nn要查找的仓库信息如下:n”); printf(“n”); printf(“ *********************************************************************n”); printf(“ ** 编号 名称 面积 说明n”); printf(“ -------n”);{ printf(“%17d%13s%20f%14sn”,t[i].num,t[i].name,t[i].square,t[i].introdution);} printf(“ *********************************************************************n”); printf(“n”); } } if(flag==0) printf(“要查找的仓库不存在!n”);getchar();} int DeleteRecord(Cangku t[],int n){ char s[20]; char ch; int i,j,flag=0; system(“cls”); printf(“请输入要删除的仓库名称n”); scanf(“%s”,s); for(i=0;i if(strcmp(s,t[i].name)==0) { flag=1; system(“cls”); printf(“nn要删除的仓库信息如下:n”); printf(“n”); printf(“ *********************************************************************n”); printf(“ ** 编号 名称 面积 说明n”); printf(“ -------n”);{ printf(“%17d%13s%20f%14sn”,t[i].num,t[i].name,t[i].square,t[i].introdution);} printf(“ *********************************************************************n”); printf(“n”); printf(“确定删除仓库信息吗?(Y/N)n”); ch=getchar(); ch=getchar(); if(ch=='Y'||ch=='y') { for(j=i;j t[j]=t[j+1]; n--; i--; printf(“删除成功.n”); } } } if(flag==0) printf(“要删除的仓库不存在!n”); getchar(); return n;} int AlterRecord(Cangku t[],int n){ int i,flag=0; char s[20],ch; system(“cls”); printf(“请输入要修改的仓库名称n”); scanf(“%s”,s); for(i=0;i { if(strcmp(s,t[i].name)==0) { flag=1; system(“cls”); printf(“nn要修改的仓库信息如下:n”); printf(“n”); printf(“ *********************************************************************n”); printf(“ ** 编号 名称 面积 说明n”); printf(“ -------n”); { printf(“%17d%13s%20f%14sn”,t[i].num,t[i].name,t[i].square,t[i].introdution); } printf(“ *********************************************************************n”); printf(“n”); printf(“确定修改仓库信息吗?(Y/N)n”); ch=getchar(); ch=getchar(); if(ch=='y'||ch=='Y') { system(“cls”); printf(“请输入修改后的信息:n”); printf(“请输入仓库新的名称:”); scanf(“%s”,t[i].name); printf(“请输入%s仓库新的编号:”,t[i].name); scanf(“%d”,&t[i].num); printf(“请输入%s仓库新的面积:”,t[i].name); scanf(“%f”,&t[i].square); printf(“请输入%s仓库新的说明:”,t[i].name); scanf(“%s”,t[i].introdution); } } } if(flag==0) printf(“要修改的仓库不存在!n”); getchar(); return n;} int AddRecord(Cangku t[],int n){ int i,m; system(“cls”); printf(“n请输入再增加的记录数:n”); scanf(“%d”,&m); printf(“开始追加记录n”); for(i=n;i { system(“cls”); printf(“n第%d个仓库的编号:”,i+1); scanf(“%d”,&t[i].num); printf(“第%d个仓库的名称:”,i+1); scanf(“%s”,t[i].name); printf(“第%d个仓库的面积:”,i+1); scanf(“%f”,&t[i].square); printf(“第%d个仓库的说明:”,i+1); scanf(“%s”,t[i].introdution); } return(n+m);} void SortOnName(Cangku t[],int n){ int i,j; struct cangku temp; for(j=1;j for(i=0;i if((strcmp(t[i].name,t[i+1].name))>0) { temp=t[i]; t[i]=t[i+1]; t[i+1]=temp; } printf(“排序成功!!n”); printf(“排序后仓库信息列表如下:n”); List(t,n);} void SortOnSquare(Cangku t[],int n){ int i,j; struct cangku temp; for(j=1;j for(i=0;i if(t[i].square { temp=t[i]; t[i]=t[i+1]; t[i+1]=temp; } printf(“排序成功!!n”); printf(“排序后仓库信息列表如下:n”); List(t,n);} void SaveRecord(Cangku t[],int n){ int i; FILE *fp; if((fp=fopen(“record.txt”,“w”))==NULL) { printf(“不能打开文件!n”); exit(1);} for(i=0;i { fwrite(&t[i],sizeof(struct cangku),1,fp); } fclose(fp);} int LoadRecord(Cangku t[]){ int n=0; FILE *fp; if((fp=fopen(“record.txt”,“a+”))==NULL) { printf(“不能打开文件!n”); exit(1);} while(fread(&t[n],sizeof(struct cangku),1,fp))n++; fclose(fp); printf(“从文件中成功读出记录!!n”); return n;} int LoadRecord1(Cangku t[]){ int n=0; FILE *fp; if((fp=fopen(“bkrecord.txt”,“a+”))==NULL) { printf(“不能打开文件!n”); exit(1);} while(fread(&t[n],sizeof(struct cangku),1,fp))n++; fclose(fp); printf(“从文件中成功读出记录!!n”); return n;} void Save(Cangku t[],int n){ int i; FILE *fp; if((fp=fopen(“bkrecord.txt”,“w”))==NULL) { printf(“不能打开文件!n”); exit(1);} for(i=0;i { fwrite(&t[i],sizeof(struct cangku),1,fp); } fclose(fp); printf(“备份成功.n”); getchar();} void Load1(Cangku t[]){ int n=0; FILE *fp; if((fp=fopen(“bkrecord.txt”,“a+”))==NULL) { printf(“不能打开文件!n”); exit(1); } while (fread(&t[n],sizeof(struct cangku),1,fp))n++; fclose(fp); getchar();} void Load(Cangku t[],int n){ int i; FILE *fp; if((fp=fopen(“record.txt”,“w”))==NULL) { printf(“不能打开文件!n”); exit(1);} for(i=0;i { fwrite(&t[i],sizeof(struct cangku),1,fp); } fclose(fp); printf(“恢复成功.n”);}1第三篇:语言课程设计-学生成绩管理系统
第四篇:C语言课程设计学生选课系统
第五篇:C语言课程设计 仓库管理系统