第一篇:C語(yǔ)言課程設(shè)計(jì)——家庭財(cái)務(wù)管理系統(tǒng)[小編推薦]
課程設(shè)計(jì)報(bào)告
課程設(shè)計(jì)題目: 家庭財(cái)務(wù)管理系統(tǒng)
學(xué)生姓名:
專
業(yè): 信息工程 班
級(jí):
指導(dǎo)教師:
2018年
1月
8日
1.需求分析
根據(jù)家庭賬務(wù)管理的需要,建立一個(gè)“家庭賬務(wù)管理系統(tǒng)”,以方便對(duì)家庭日常收入及支出進(jìn)行記錄和管理。該系統(tǒng)要求:①家庭月收入管理②家庭月支出管理③統(tǒng)計(jì)家庭總收入/總支出④系統(tǒng)提供收入/支出的添加、刪除和修改功能。
2.總體設(shè)計(jì)
根據(jù)以上分析,本家庭賬務(wù)管理系統(tǒng)主要包括: ①?gòu)逆I盤(pán)鍵入家庭月收入、月支出數(shù)據(jù); ②查詢?cè)率杖?、月支出明?xì); ③刪除收入、支出數(shù)據(jù); ④修改收入、支出數(shù)據(jù); ⑤統(tǒng)計(jì)總收入/總支出; ⑥退出系統(tǒng)。
除main()函數(shù)之外,系統(tǒng)還定義了以下函數(shù)來(lái)實(shí)現(xiàn)各部分內(nèi)容: ①add_income():添加收入數(shù)據(jù)函數(shù)。②add_payout():添加支出數(shù)據(jù)函數(shù)。③search_data():查找數(shù)據(jù)函數(shù)。
④initialize():初始化函數(shù),讀取文本數(shù)據(jù)。⑤show_info():顯示數(shù)據(jù)函數(shù)。⑥count_total():統(tǒng)計(jì)函數(shù),統(tǒng)計(jì)總收入、總支出。⑦update_data():修改信息函數(shù)。⑧delete_data():刪除數(shù)據(jù)函數(shù)。⑨quit():退出函數(shù)。程序結(jié)構(gòu)功能圖如下:
3.詳細(xì)設(shè)計(jì)
3.1收入管理
3.2支出管理
4.測(cè)試結(jié)果
4.1 程序運(yùn)行主菜單
4.2 添加收入測(cè)試
4.3 查詢收入明細(xì)測(cè)試
4.4 刪除收入測(cè)試
4.5 修改收入測(cè)試
4.6 添加支出測(cè)試
4.7 查詢支出明細(xì)測(cè)試
4.8 刪除支出測(cè)試
4.9 修改支出測(cè)試
4.10 統(tǒng)計(jì)總收入/支出測(cè)試
4.11 退出系統(tǒng)測(cè)試
軟件操作使用說(shuō)明書(shū)
本系統(tǒng)采用命令行對(duì)話方式進(jìn)行操作,運(yùn)行后出現(xiàn)主界面(如下圖所示),然后按照主界面菜單指引操作即可。
6.總結(jié)
編寫(xiě)程序之前要有一個(gè)整體的思路,不能寫(xiě)到哪里算哪里。這樣很容易遺漏,連續(xù)性也不好。通過(guò)本次的課程設(shè)計(jì)讓我對(duì)于數(shù)組、文件的存放、循環(huán)結(jié)構(gòu)等知識(shí)有了更加透徹的理解。希望在以后的課程設(shè)計(jì)中對(duì)于知識(shí)的運(yùn)用能夠更加的熟練。
代碼:
#include
//自定義枚舉類型fi_type,用來(lái)表示收入與支出 typedef enum _fi_type { income=1,//收入 payout =-1 //支出 } fi_type;// 家庭財(cái)務(wù)信息結(jié)構(gòu)體 typedef struct _fi_info { int year;int month;fi_type type;char name[9];float money;char detail[11];}fi_info;
// 存儲(chǔ)財(cái)務(wù)數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)體 typedef struct _fi_data { fi_info info;struct _fi_data* next;} fi_data;fi_data *head;//財(cái)務(wù)數(shù)據(jù)的頭結(jié)點(diǎn) void menu();//菜單函數(shù) 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 家庭財(cái)務(wù)管理系統(tǒng)n”);printf(“tt ~~~~~~~~~~~~~~~~~~~~~~n”);printf(“tt ~~~~~~~~~~~~~~~~~~~~~~n”);printf(“tt*******************************************n”);printf(“tt收入管理:”);printf(“1.添加收入”);printf(“ 2.查詢收入明細(xì)n”);printf(“ttt 3.刪除收入”);printf(“ 4.修改收入n”);printf(“tt*******************************************n”);printf(“tt支出管理:”);printf(“5.添加支出”);printf(“ 6.查詢支出明細(xì)n”);printf(“ttt 7.刪除支出”);printf(“ 8.修改支出n”);printf(“tt*******************************************n”);printf(“tt統(tǒng) 計(jì):”);printf(“9.統(tǒng)計(jì)總收入/總支出n”);printf(“tt*******************************************n”);printf(“tt退 出:0.退出系統(tǒng)n”);printf(“tt*******************************************nnn”);} void main(){ int selected=0;initialize();while(selected>=0&&selected<=9){ system(“cls”);menu();printf(“tt>請(qǐng)選擇要進(jìn)行的操作(0-9):”);if(scanf(“%d”,&selected)!=1||selected<0||selected>9){ printf(“tt>輸入有誤!請(qǐng)選擇(0-9)之間的數(shù)字!按任意鍵重試”);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;} //輸入函數(shù)
void input_info(fi_info *info){ printf(“tt>請(qǐng)輸入年月(YYYY/M)”);scanf(“%d/%d”,&(info->year),&(info->month));printf(“tt>請(qǐng)輸入家庭成員姓名(最大長(zhǎng)度為%d):”,MAXNAME-1);scanf(“%s”,info->name);printf(“tt>輸入金額:”);scanf(“%f”,&(info->money));printf(“tt>請(qǐng)輸入備注(最大長(zhǎng)度為%d):”,20);scanf(“%s”,info->detail);}
//查找數(shù)據(jù)函數(shù)
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>請(qǐng)輸入要查詢的年月(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>沒(méi)有找到數(shù)據(jù)n”);} printf(“tt>繼續(xù)查找其他數(shù)據(jù)?(y or n)”);input=getchar();if(input=='y'||input=='Y')continue;else break;} } } //初始化函數(shù),讀取文本數(shù)據(jù) 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);} //顯示信息函數(shù) 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”);} //統(tǒng)計(jì)總收入、總支出 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|合計(jì)收入t|合計(jì)支出t|結(jié)余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);} //修改信息函數(shù)
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>請(qǐng)輸入要查詢的年月(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>沒(méi)有找到數(shù)據(jù)n”);printf(“tt>繼續(xù)查找其他數(shù)據(jù)?(y or n)”);input=getchar();if(input=='y'||input=='Y')continue;else break;} } } void delete_data(fi_type type)//刪除數(shù)據(jù)函數(shù) { 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>請(qǐng)輸入要查詢的年月(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>沒(méi)有找到數(shù)據(jù)n”);printf(“tt>繼續(xù)查找其他數(shù)據(jù)?(y or n)”);input=getchar();if(input=='y'||input=='Y')continue;else break;} } } void clear_data()//清空鏈表數(shù)據(jù) { 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語(yǔ)言課程設(shè)計(jì)火車(chē)票系統(tǒng)源代碼
#include
//編號(hào)// char name[20];
//起點(diǎn)和終點(diǎn)// char time[5];
//出發(fā)時(shí)間// int price;
//車(chē)票價(jià)格// int amount;
//剩余數(shù)量// struct Node *next;}Node;//創(chuàng)建鏈表并輸入數(shù)據(jù)// 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(“請(qǐng)輸入第%d種火車(chē)票的信息:n”,++i);printf(“請(qǐng)輸入火車(chē)的編號(hào):”);
scanf(“%d”,&s->num);
printf(“起點(diǎn)和終點(diǎn):”);scanf(“%s”,s->name);printf(“出發(fā)時(shí)間:”);scanf(“%s”,s->time);printf(“車(chē)票價(jià)格:”);scanf(“%d”,&s->price);printf(“剩余數(shù)量:”);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寫(xiě)文件出錯(cuò),按任意鍵退出!”);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(“讀文件錯(cuò)誤,按任意鍵退出!”);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;} //將鏈表中的數(shù)據(jù)輸出// void print(struct Node *h){
struct Node *s;
printf(“n火車(chē)票信息如下:n”);
printf(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“編號(hào)
起點(diǎn)和終點(diǎn)
出發(fā)時(shí)間
車(chē)票價(jià)格
剩余票數(shù):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.火車(chē)票編號(hào)n”);printf(“tt
2.起點(diǎn)和終點(diǎn)n”);printf(“tt
3.出發(fā)時(shí)間n”);printf(“tt
4.車(chē)票價(jià)格n”);printf(“tt
5.剩余票數(shù)n”);printf(“請(qǐng)輸入您要查詢的方法的序號(hào):”);scanf(“%d”,&i);switch(i){ case 1:printf(“請(qǐng)輸入你要查詢火車(chē)票的編號(hào):”);scanf(“%d”,&j);
while(h->next!=NULL)
{
h=h->next;
if(h->num==j)return h;
}
return NULL;break;case 2:printf(“請(qǐng)輸入您要查詢火車(chē)票的起點(diǎn)和終點(diǎn):”);scanf(“%s”,s);while(h->next!=NULL){
h=h->next;if(strcmp(h->name,s)==0)
return h;
} return NULL;break;case 3:printf(“請(qǐng)輸入您要查詢火車(chē)票的時(shí)間:”);
scanf(“%s”,s);
while(h->next!=NULL)
{
h=h->next;
if(strcmp(h->time,s)==0)
return h;
}
return NULL;
break;case 4:printf(“請(qǐng)輸入你要查詢火車(chē)票的價(jià)格 :”);scanf(“%d”,&j);
while(h->next!=NULL)
{
h=h->next;
if(h->price==j)
return h;
}
return NULL;
break;case 5:printf(“請(qǐng)輸入你要查詢火車(chē)票的剩余票數(shù):”);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
您要修改哪一項(xiàng)?n”);printf(“t
1.火車(chē)編號(hào)n”);printf(“t
2.起點(diǎn)和終點(diǎn)n”);printf(“t
3.出發(fā)時(shí)間n”);printf(“t
4.車(chē)票價(jià)格n”);
printf(“t
5.剩余票數(shù)n”);printf(“t
0.退出系統(tǒng)n”);
printf(“------------n”);printf(“請(qǐng)輸入您要修改項(xiàng)的編號(hào):”);scanf(“%d”,&j);switch(j)
{ case 1:
printf(“修改后的火車(chē)編號(hào):”);
scanf(“%d”,&p->num);
break;
case 2:
printf(“修改后的起點(diǎn)和終點(diǎn):”);
scanf(“%s”,p->name);
break;
case 3:
printf(“修改后的出發(fā)時(shí)間:”);
scanf(“%s”,p->time);
break;
case 4:
printf(“修改后的車(chē)票價(jià)格:”);
scanf(“%d”,&p->price);
break;
case 5:
printf(“修改后的剩余票數(shù):”);
scanf(“%d”,&p->amount);
break;
case 0:break;} } //刪除信息// delete(struct Node *h){ struct Node *p;
int j;
printf(“請(qǐng)輸入您要?jiǎng)h除的火車(chē)票的編號(hào):”);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(“寫(xiě)文件出錯(cuò),按任意鍵返回.n”);getchar();exit(1);
}
printf(“請(qǐng)輸入要添加的火車(chē)票的信息:火車(chē)編號(hào),起點(diǎn)和終點(diǎn),出發(fā)時(shí)間,車(chē)票價(jià)格,剩余票數(shù):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);} //數(shù)據(jù)的統(tǒng)計(jì)// void count(struct Node *h){ struct Node *s;s=h;int i,j,k,n=0;printf(“*****************************************************************************n”);
printf(“tt
請(qǐng)選擇您要統(tǒng)計(jì)項(xiàng)目的序號(hào):n”);
printf(“tt
1.車(chē)票價(jià)格n”);
printf(“tt
2.剩余票數(shù)n”);printf(“tt
0.退出界面n”);
scanf(“%d”,&i);switch(i)
{
case 1:
printf(“請(qǐng)輸入您要統(tǒng)計(jì)車(chē)票的價(jià)格的標(biāo)準(zhǔn):”);
scanf(“%d”,&j);
printf(“tt
請(qǐng)選擇低于或高于標(biāo)準(zhǔn):n”);
printf(“tt
1.價(jià)格低于%d的個(gè)數(shù)n”,j);
printf(“tt
2.價(jià)格高于%d的個(gè)數(shù)n”,j);
scanf(“%d”,&k);
if(k==1)
{
for(s=h->next;s->next!=NULL;s=s->next)
if(s->price n++; printf(“車(chē)票價(jià)格低于%d的個(gè)數(shù)有%d個(gè).n”,j,n); } else { for(s=h->next;s->next!=NULL;s=s->next) if(s->price>j) n++; printf(“車(chē)票價(jià)格低于%d的個(gè)數(shù)有%d個(gè).n”,j,n); } break; case 2: printf(“請(qǐng)輸入您要統(tǒng)計(jì)剩余票數(shù)的數(shù)量:”); scanf(“%d”,&j); printf(“tt 請(qǐng)選擇低于或高于所輸票數(shù):n”); printf(“tt 1.票數(shù)低于%d的個(gè)數(shù)n”,j); printf(“tt 2.票數(shù)高于%d的個(gè)數(shù)n”,j); scanf(“%d”,&k); if(k==1) { for(s=h->next;s->next!=NULL;s=s->next) if(s->amount n++; printf(“剩余票數(shù)低于%d的個(gè)數(shù)有%d個(gè).n”,j,n); } else { for(s=h->next;s->next!=NULL;s=s->next) if(s->amount>j) n++; printf(“剩余票數(shù)高于%d的個(gè)數(shù)有%d個(gè).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寫(xiě)文件出錯(cuò),按任意鍵退出.n”); getchar();exit(1);} printf(“請(qǐng)輸入用戶名:”); scanf(“%s”,name);printf(“請(qǐng)輸入密碼:”); scanf(“%s”,pwd); fprintf(fp,“%s %sn”,name,pwd); getchar(); fclose(fp); printf(“用戶注冊(cè)成功!n”);} //檢驗(yà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(“讀文件出錯(cuò),按任意鍵退出!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;} //數(shù)據(jù)排序// void sort(struct Node *h){ struct Node *s,*p,*m,*n;int t,t1,t2,t3;char s1[20];char s2[10]; printf(“車(chē)票價(jià)格由小到大排序如下: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剩余車(chē)票數(shù)量由多到少排序如下: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***************歡迎進(jìn)入火車(chē)票管理系統(tǒng)******************n”);printf(“tt 1.用戶登錄n”);printf(“tt 2.用戶注冊(cè)n”);printf(“tt 0.退出系統(tǒng) n”);printf(“請(qǐng)輸入所選序號(hào):”);scanf(“%d”,&k); switch(k){ case 1: printf(“請(qǐng)輸入用戶名:”); scanf(“%s”,name); printf(“請(qǐng)輸入密碼:”); scanf(“%s”,pwd); if(check(name,pwd)) { printf(“密碼正確.n”); do { printf(“nntt*********************歡迎進(jìn)入火車(chē)票管理系統(tǒng)***********************n”); printf(“tt 1.錄入火車(chē)票信息tt 2.添加火車(chē)票信息n”); printf(“tt 3.修改火車(chē)票信息tt 4.刪除火車(chē)票信息n”); printf(“tt 5.打印火車(chē)票信息tt 6.查詢火車(chē)票信息n”); printf(“tt 7.統(tǒng)計(jì)火車(chē)票信息tt 8.火車(chē)票銷(xiāo)售排行n”); printf(“tt 0.退出系統(tǒng)n”); printf(“請(qǐng)輸入您要進(jìn)入菜單的序號(hào)(0-8):”); scanf(“%d”,&i); switch(i) { case 1: printf(“請(qǐng)錄入火車(chē)票信息nn”); head=creat(); save(head); head=read(); break; case 2: append(); break; case 3: printf(“請(qǐng)輸入您要修改的火車(chē)票的編號(hào):”); scanf(“%d”,&j); change(head,j); save(head); break; case 4: head=read(); if(delete(head)) { printf(“已正確刪除!n”); save(head); } else printf(“要?jiǎng)h除的結(jié)點(diǎn)不存在!n”); break; case 5: head=read(); print(head); break; case 6: printf(“請(qǐng)輸入您要查詢火車(chē)票的編號(hào)(以0結(jié)束):”); scanf(“%d”,&j); { p=find(head); printf(“編號(hào) 起點(diǎn)和終點(diǎn) 出發(fā)時(shí)間 車(chē)票價(jià)格 剩余票數(shù):n”); printf(“%d %10s %5s %10d %6dn”,p->num,p->name,p->time,p->price,p->amount); printf(“請(qǐng)繼續(xù)輸入序號(hào)(以0結(jié)束):”); 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(“密碼錯(cuò)誤或用戶名不存在.n”); break;case 2:save_user();break;case 0:break;} 謝 謝 使 1、課程設(shè)計(jì)的目的、任務(wù) 《匯編語(yǔ)言》課程設(shè)計(jì)對(duì)于鞏固匯編語(yǔ)言理論知識(shí),加強(qiáng)學(xué)生的實(shí)際動(dòng)手能力和提高學(xué)生綜合素質(zhì)十分必要。課程設(shè)計(jì)的目的主要是通過(guò)程序設(shè)計(jì)方法和技能的基本訓(xùn)練,鞏固在課堂上學(xué)到的有關(guān)程序設(shè)計(jì)的基本知識(shí)和基本方法,通過(guò)實(shí)際動(dòng)手能力的培養(yǎng),進(jìn)一步熟悉匯編語(yǔ)言的結(jié)構(gòu)和使用方法,達(dá)到能獨(dú)立閱讀、編制和調(diào)試一定規(guī)模的匯編語(yǔ)言程序的水平。 2、軟件需求分析和設(shè)計(jì) 2.1學(xué)生成績(jī)管理系統(tǒng)是對(duì)學(xué)生成績(jī)的管理,其中包括以下幾個(gè)模塊:(1).插入一個(gè)數(shù)據(jù)(插入學(xué)生學(xué)號(hào)以及語(yǔ)數(shù)外三個(gè)成績(jī))。(2)修改一個(gè)數(shù)據(jù)。(3)刪除學(xué)生成績(jī)數(shù)據(jù)。(4)查找學(xué)生成績(jī)。(5)查看學(xué)生成績(jī)的排名(6)查看學(xué)生成績(jī)分布(7)按esc鍵退出系統(tǒng) 2.2學(xué)生成績(jī)管理系統(tǒng)應(yīng)該包含以下信息:學(xué)號(hào),語(yǔ)文成績(jī),英語(yǔ)成績(jī),數(shù)學(xué)成績(jī)。因此,系統(tǒng)應(yīng)該提供以下功能:(1)輸出顯示菜單。(2)輸入學(xué)生的成績(jī)(3)修改學(xué)生成績(jī)(4)刪除學(xué)生成績(jī)(5)查詢學(xué)生成績(jī)(6)顯示學(xué)生成績(jī)排名(7)顯示成績(jī)分布統(tǒng)計(jì)(8)按esc鍵退出系統(tǒng) 2.3依據(jù)程序的功能需求,該系統(tǒng)的功能結(jié)構(gòu)圖如下 系統(tǒng)功能結(jié)構(gòu)圖 2.4 程序流程圖: 主程序流程圖 查找學(xué)生成績(jī) 插入學(xué)生學(xué)號(hào)及成績(jī) 修改學(xué)生的成績(jī) 顯示各個(gè)學(xué)科各分?jǐn)?shù)段的人數(shù) 3、程序?qū)崿F(xiàn)說(shuō)明 3.1學(xué)生管理系統(tǒng)中各子程序如下: (1).輸入全部學(xué)生學(xué)號(hào)以及語(yǔ)文,英語(yǔ),數(shù)學(xué)三科的成績(jī)。子程序名:insert 子程序描述:該子程序?yàn)檩斎胱殖绦?。系統(tǒng)在開(kāi)始的時(shí)候是沒(méi)有數(shù)據(jù)的,通過(guò)該子程序可以初始化系統(tǒng),將學(xué)生的學(xué)號(hào)及成績(jī)輸入系統(tǒng)。 代碼: insert proc near;定義進(jìn)程子程序:插入學(xué)生,學(xué)號(hào)及 成績(jī) call input;調(diào)用input add n,1 ret insert endp (2).修改輸入的成績(jī)。子程序名:modify 子程序描述:通過(guò)子程序修改學(xué)生的成績(jī) 代碼: modify proc near;定義進(jìn)程子程序:修改學(xué)生學(xué)號(hào),成績(jī) md1:output mess1;輸出mess1 shuru;調(diào)用宏shuru:二位數(shù)據(jù)輸入 mov bl,n mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si];先查找輸入的學(xué)生是否存在 je qq1_1;查到的話,就跳轉(zhuǎn)到qq1_1輸入修改的值,也就是重新輸入。;結(jié)果相等則跳轉(zhuǎn)到qq1_1 add si,1 cmp si,bx jbe md;小于等于則跳轉(zhuǎn)到md output mess;輸出mess jmp md1;不相等繼續(xù)輸入學(xué)號(hào) qq1_1:;轉(zhuǎn)入修改的值重新輸入。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] 分別輸入語(yǔ)文,英語(yǔ),數(shù)學(xué)成績(jī),并將其放 在緩沖區(qū)buf中 比較輸入的成績(jī)是否大于120,如果大于120的 話,那么重 新輸入成績(jī) 小于等于則轉(zhuǎn)移到qq2_1 輸出ts3 跳轉(zhuǎn)到qq1_1 輸出空格 將存入buf中的成績(jī),分別賦值給存放對(duì)應(yīng)科 目的成績(jī)的數(shù)組 mov eng[di],al mov al,buf[2] mov mat[di],al ret modify endp (3).刪除學(xué)生的成績(jī)。子程序名:delete 子程序描述:通過(guò)子程序刪除學(xué)生的成績(jī) 代碼: de proc near;刪除某個(gè)學(xué)生的記錄 sc1:output mess1 shuru;調(diào)用宏shuru,接受輸入的學(xué)號(hào) mov bl,n mov bh,0 mov al,dl mov si,0 sc: cmp al,xh[si];查詢輸入學(xué)號(hào)的學(xué)生信息是否存在,不存在的話,重新輸入學(xué)號(hào) je sc2;相等則轉(zhuǎn)移到sc2 add si,1 cmp si,bx jbe sc;小于等于則轉(zhuǎn)移到sc output mess;輸出mess jmp sc1 sc2: sub bx,si cmp bx,0 je sc3;相等則轉(zhuǎn)移到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循環(huán)指令,執(zhí)行操作(cx)<--(cx)-1.若 cx!=0,跳轉(zhuǎn)到標(biāo)號(hào)sc處循環(huán)執(zhí)行;cx=0,則推出 循環(huán),執(zhí)行l(wèi)oop的下一條指令 sub n,1 sc3: ret de endp (3).查詢學(xué)生的成績(jī)。子程序名:find 子程序描述:通過(guò)子程序查詢學(xué)生的成績(jī) 代碼: find proc near;定義進(jìn)程子程序:查找學(xué)生成績(jī) call sum;求學(xué)生的總成績(jī) call ping;求學(xué)生的平均成績(jī) bj1:output mess1;輸出mess1 shuru;二位數(shù)數(shù)據(jù)輸入 mov bl,n mov bh,0 mov al,dl mov si,0 bj: cmp al,xh[si];將輸入的學(xué)號(hào)與輸入的學(xué)號(hào)相比,je i;存在的話,將此學(xué)生的成績(jī)輸出。je表示結(jié)果相 等則轉(zhuǎn)移。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 小于等于則轉(zhuǎn)移到bj 為二位數(shù)據(jù)輸出 輸出空格 將字節(jié)變?yōu)樽?/p> 為三位數(shù)據(jù)輸出。輸出空格 將字節(jié)變?yōu)樽?/p> 為三位數(shù)據(jù)輸出 輸出空格的字符串,用于與標(biāo)題欄對(duì)齊 shuzii ax output bg mov ax,si mov bl,2 mul bl mov bx,ax shuzii zc[bx];shuzii為三位數(shù)據(jù)輸出 output bg;輸出空格的字符串,用于與標(biāo)題欄對(duì)齊 shuzi mc[si];shuzi為二位數(shù)據(jù)輸出 ret find endp (4).顯示學(xué)生的成績(jī)排名。子程序名:show 子程序描述:通過(guò)子程序顯示學(xué)生的成績(jī)排名 代碼: show proc near;定義進(jìn)程子程序:顯示結(jié)果排名 call sum;調(diào)用宏sum call ping;調(diào)用宏ping call rank;調(diào)用宏rank call shuchu;調(diào)用宏shuchu ret show endp 3.2程序運(yùn)行抓圖: 主菜單 修改學(xué)生成績(jī) 刪除學(xué)生成績(jī) 顯示各個(gè)學(xué)科各分?jǐn)?shù)段的人數(shù) 4、程序總結(jié) 通過(guò)兩個(gè)星期的學(xué)習(xí),努力,終于完成了報(bào)告。系統(tǒng)可以很好的運(yùn)行。這兩個(gè)多星期的時(shí)間,幾乎每天不是在敲代碼,就是在看代碼,查書(shū),上網(wǎng)。系統(tǒng)中用到了很多最近才學(xué)習(xí)的知識(shí),比如宏,子程序。這些都使得代碼的運(yùn)行效率提高了,代碼行數(shù)減少了。系統(tǒng)還用到了bios的清屏功能。這些功能如果不是做課程設(shè)計(jì),我想我很難會(huì)接觸到這些知識(shí)。 由于自己對(duì)知識(shí)掌握的不是很牢固,其中也會(huì)碰到一些困難。每當(dāng)遇到問(wèn)題的時(shí)候,我會(huì)先上網(wǎng)去查找,看看有沒(méi)有人提過(guò)這方面的問(wèn)題?;ヂ?lián)網(wǎng)是強(qiáng)大的,大部分的問(wèn)題通過(guò)網(wǎng)絡(luò)都可以解決。部分找不到的問(wèn)題,我就去請(qǐng)教班里學(xué)得好的同學(xué)。他們對(duì)知識(shí)的掌握遠(yuǎn)超過(guò)我。這樣下來(lái),很多問(wèn)題都迎刃而解了。 課程設(shè)計(jì)是一個(gè)很好的掌握書(shū)本上知識(shí)的過(guò)程。平時(shí)上課之后,自己都不會(huì)想著去敲一些代碼聯(lián)系聯(lián)系。通過(guò)做課程設(shè)計(jì),將理論與實(shí)踐結(jié)合了起來(lái),對(duì)知識(shí)的理解更加深入了。 題目 一、學(xué)生選課管理系統(tǒng) 第一部分:課程設(shè)計(jì)名稱、目的、要求 第二部分:程序總體設(shè)計(jì)思路 第三部分:程序功能劃分、圖示及流程圖 第四部分:程序設(shè)計(jì)數(shù)據(jù)、運(yùn)行結(jié)果 第五部分:程序的優(yōu)缺點(diǎn) 第六部分:心得體會(huì) 第七部分:附錄(源程序) 第八部分:附錄(參考文獻(xiàn)) 目錄 ..............................................................................第一部分:課程設(shè)計(jì)名稱、目的、要求 名稱:學(xué)生選修課程系統(tǒng)設(shè)計(jì) 目的:運(yùn)用C語(yǔ)言提高解決實(shí)際問(wèn)題的能力 實(shí)驗(yàn)環(huán)境:Microsoft Visual C++ 6.0 內(nèi)容: 假定有n門(mén)課程,每門(mén)課程有課程編號(hào),課程名稱,課程性質(zhì),總學(xué)時(shí),授課學(xué)時(shí),實(shí)驗(yàn)或上機(jī)學(xué)時(shí),學(xué)分,開(kāi)課學(xué)期等信息,學(xué)生可按要求(如總學(xué)分不得少于60)自由選課?!竟δ堋?/p> 系統(tǒng)以菜單方式工作? 課程信息錄入功能(課程信息用文件保存)--輸入? 課程信息瀏覽功能--輸出? 查詢功能:(至少一種查詢方式)--算法? 按學(xué)分查詢? 按課程性質(zhì)查詢? 學(xué)生選修課程(可選項(xiàng))? 第二部分:程序總體設(shè)計(jì)思路 由于C語(yǔ)言是面對(duì)過(guò)程的語(yǔ)言,故我的設(shè)計(jì)思路是根據(jù)目標(biāo)程序運(yùn)行的過(guò)程來(lái)編寫(xiě)的。 具體的設(shè)計(jì)思路如下: 程序的要求是設(shè)計(jì)學(xué)生選修課管理系統(tǒng),對(duì)選修課程能夠進(jìn)行錄入和修改操作等,要求有菜單界面和退出功能。首先,考慮到程序的數(shù)據(jù)輸入,可以設(shè)置一個(gè)管理員登陸選項(xiàng),通過(guò)該選項(xiàng)進(jìn)入管理員界面,進(jìn)行選修課的錄入和修改操作,最后將錄入的課程保存到相應(yīng)的文件中。然后定義各種函數(shù)的功能包括查看,查詢,刪除等。另一個(gè)為學(xué)生登陸界面,該界面學(xué)生可以進(jìn)行課程選擇和瀏覽查詢等操作。在進(jìn)行該操作之前需要對(duì)管理員保存的文件進(jìn)行讀取,然后對(duì)其中的內(nèi)容進(jìn)行查詢等,在學(xué)生選好課程以后,可以將其選好的課程保存于相應(yīng)的文件中,以便下次進(jìn)行修改。通過(guò)函數(shù)的層層調(diào)用來(lái)實(shí)現(xiàn)程序的邏輯結(jié)構(gòu)。中間通過(guò)文件的打開(kāi)和關(guān)閉實(shí)現(xiàn)對(duì)文件內(nèi)部所包含的數(shù)據(jù)的操作。 整個(gè)程序的設(shè)計(jì)思路到此結(jié)束。 第三部分:程序功能劃分、圖示及流程圖 【功能模塊劃分及其流程圖】 本程序功能模塊根據(jù)程序設(shè)計(jì)的需求,綜合程序的實(shí)用性、人性化、智能化的考慮,將程序劃分為6個(gè)部分分別編寫(xiě),程序主體功能將由這9個(gè)部分來(lái)完成。這9個(gè)部分依次是: 1.登錄界面函數(shù);void login()2.學(xué)生登錄界面據(jù)函數(shù):void stu_login()3.管理員登錄界面函數(shù):void man_login()4.退出界面函數(shù):void bye_sys() 5.課程選擇函數(shù):void c_select()6.課程瀏覽函數(shù):void c_view()7.課程查詢函數(shù):void c_search()8.課程增加函數(shù):void c_add()9.課程刪除函數(shù):void c_delete()10.菜單函數(shù):void index()11.主函數(shù)部分; main() 總體設(shè)計(jì): 學(xué)生選課系統(tǒng)管理員登錄學(xué)生登錄新增課程刪除課程課程瀏覽查詢課程學(xué)生選課課程瀏覽課程查詢c_add函數(shù)c_delete函數(shù)c_view函數(shù)c_search函數(shù)c_select函數(shù)c_view函數(shù)c_search函數(shù) 系統(tǒng)功能模塊圖 部分函數(shù)流程圖: 1、課程選擇函數(shù): 開(kāi)始輸入要選擇的課程的編號(hào)j=0;j 2、課程查詢函數(shù) 開(kāi)始輸入要查詢的課程的編號(hào)j=0;j 3、課程增加函數(shù) 開(kāi)始輸入要增加的課程的編號(hào)j=0;j 4、課程刪除函數(shù) 開(kāi)始輸入要?jiǎng)h除的課程的編號(hào)nj=0;j 本程序是一款應(yīng)用軟件,故數(shù)據(jù)設(shè)計(jì)、程序運(yùn)行結(jié)果應(yīng)在程序的 運(yùn)用中得以體現(xiàn),現(xiàn)在通過(guò)一個(gè)程序的運(yùn)用事例來(lái)對(duì)程序運(yùn)行結(jié)果進(jìn)行演示與實(shí)現(xiàn)?!拒浖\(yùn)用舉例】 1、程序開(kāi)始界面如下: 選擇某個(gè)選項(xiàng),如進(jìn)行管理員登錄,進(jìn)行課程的增加 進(jìn)入管理員界面: 2、再選擇所要進(jìn)行的操作,如進(jìn)行課程增加,結(jié)果如下: 下面可以進(jìn)行繼續(xù)增加課程或者退出: 3、選擇課程瀏覽,可以分頁(yè)查看相應(yīng)的課程信息: 第一頁(yè): 第二頁(yè): 4、課程查詢 查找結(jié)果: 4、管理員課程刪除操作: 刪除后可以進(jìn)行瀏覽,觀察刪除后的結(jié)果: 可見(jiàn)刪除后只有一條記錄。刪除操作完成正確。下面進(jìn)行學(xué)生操作的使用方法: 1、學(xué)生登陸界面: 2、選擇學(xué)生選課選項(xiàng): 3、學(xué)生登陸也可進(jìn)行課程瀏覽和查詢函數(shù),其結(jié)果與管理員登陸相同,不再演示。 第五部分:程序的優(yōu)缺點(diǎn) 【程序的優(yōu)點(diǎn)】 算法是程序的靈魂,程序的優(yōu)點(diǎn)首先表現(xiàn)在算法上的優(yōu)點(diǎn),其次才是功能上的。 [算法上的優(yōu)點(diǎn)]主要體現(xiàn)在以下三點(diǎn): 1.程序采用main主函數(shù)方式設(shè)計(jì),程序的主體的功能大都由該功能 完成。程序如此設(shè)計(jì)有利于程序的進(jìn)一步改進(jìn)及有助于程序執(zhí)行效率的提高。 2.程序?qū)ξ募?shù)據(jù)的讀寫(xiě)采用了fread和fwrite塊讀寫(xiě)函數(shù),能夠?qū)⑽募械臄?shù)據(jù)完全讀出,然后賦到定義的數(shù)組中,再在相應(yīng)的數(shù)組中進(jìn)行一系列操作,最終再寫(xiě)入文件。 3.插入操作在本程序中將課程信息直接插入數(shù)組最后一個(gè)節(jié)點(diǎn),從而減少了數(shù)據(jù)的相互移動(dòng),節(jié)省了時(shí)間。 [功能上的優(yōu)點(diǎn)] 主要體現(xiàn)在以下兩點(diǎn): 1. 簡(jiǎn)潔明了的程序菜單。程序主要采用了層次不同的菜單,相互獨(dú)立又相互聯(lián)系,巧妙相接,符合用戶的使用習(xí)慣與思維。2. 人性化的程序提示語(yǔ)言,程序提示語(yǔ)言較人性化,不僅大多為祈使語(yǔ)句、疑問(wèn)句,而且提示明確,具有較強(qiáng)的明確的指導(dǎo)作用。程序提示不僅層次分明,提示方式多樣,而且提示信息井然有序,更加有利于用戶順利、準(zhǔn)確地看懂程序并進(jìn)行操作。 【程序的缺點(diǎn)】 主要表現(xiàn)在以下兩點(diǎn): 1、本程序沒(méi)有進(jìn)行相應(yīng)的密碼操作,所以對(duì)于使用者來(lái)說(shuō)可能存在比較大的不保密性。需要改善。 2、本程序沒(méi)有使用文本讀寫(xiě)函數(shù)fscanf和fprintf,所以的到的課程文件和選課文件都是二進(jìn)制形式。 第六部分:心得體會(huì) 選課系統(tǒng)程序比起通訊錄程序來(lái)講好寫(xiě)一些,由于本程序用到了數(shù)組,對(duì)于數(shù)組的操作掌握的比較熟練,所以在編寫(xiě)程序的時(shí)候困難沒(méi)有那么多。 本程序在編寫(xiě)的過(guò)程中用到了許多通訊錄中的模塊化設(shè)計(jì)和函數(shù)互相調(diào)用的思想,使得編寫(xiě)比較方便和好用。 通過(guò)該系統(tǒng)的課程設(shè)計(jì)分析,我掌握了模塊化設(shè)計(jì)的方法,理解和運(yùn)用了結(jié)構(gòu)化程序設(shè)計(jì)的思想和方法,掌握和提高了運(yùn)用C語(yǔ)言進(jìn)行程序設(shè)計(jì)的能力。 程序設(shè)計(jì)的過(guò)程,實(shí)際上是確定解決問(wèn)題的詳細(xì)步驟,而這個(gè)步驟通常叫做流程,在程序設(shè)計(jì)過(guò)程中理清楚整個(gè)問(wèn)題的流程很重要,然后采取逐步細(xì)化的方法實(shí)現(xiàn)整個(gè)程序。 對(duì)于一個(gè)較大的應(yīng)用程序,一般不可能一次就設(shè)計(jì)出一個(gè)很完善的系統(tǒng)。通常要先設(shè)計(jì)滿足基本要求的系統(tǒng),然后再測(cè)試或者在使用的過(guò)程中不斷完善,慢慢地做成一個(gè)功能很完善選修課程管理系統(tǒng)。所以在進(jìn)行調(diào)試的時(shí)候需要對(duì)許多變量理解和掌握其變化規(guī)律等,這對(duì)于我更好的掌握visual C中調(diào)試的工具有很大的幫助。 總之經(jīng)過(guò)這次課程設(shè)計(jì),我對(duì)c語(yǔ)言的使用和理解都有了很大的加深,對(duì)于編程的思想也有了很多新的理解和感受。 第七部分:附錄 一、參考文獻(xiàn): 1、李麗娟主編,C語(yǔ)言程序設(shè)計(jì)教程(第二版),人民郵電出版社 2、嚴(yán)蔚敏主編,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言),清華大學(xué)出版社 3、崔單主編,C語(yǔ)言程序設(shè)計(jì)案例精粹,電子工業(yè)出版社 4、譚浩強(qiáng)主編,程序設(shè)計(jì)(第三版),清華大學(xué)出版社 二、源程序 #include“stdio.h” #include“stdlib.h” #include“windows.h” #include“string.h” void index();//首頁(yè) void login();void bye_sys();//退出界面 void stu_login();//學(xué)生登錄菜單 void c_select();void c_view();//課程瀏覽 void c_add();//增加課程 void c_delete();void c_searchs();//學(xué)生查詢函數(shù) void c_searchm();//管理員查詢函數(shù) void c_viewm();//管理員瀏覽函數(shù) void c_views();//學(xué)生瀏覽函數(shù) struct course//定義課程結(jié)構(gòu)體 { int c_num; char c_name[20]; int c_score; int c_nelepeo;//課程已選人數(shù) int c_melepeo;//課程人數(shù)上限 };struct student { char s_number[10]; char s_password[10];};struct manager { char m_name[10];char m_password[10];}; void index()//首頁(yè) { char input; printf(“nnttt*****************************n”); printf(“ttt 湖南大學(xué)學(xué)生選課系統(tǒng)n”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt**********設(shè)計(jì)者:劉曉斌******nnn”); input=getchar(); system(“cls”);} void login()//登陸界面 { void stu_login(); void man_login(); void bye_sys(); int input; do { system(“cls”); printf(“nnnt1.學(xué)生登錄n”); printf(“t2.管理員登陸n”); printf(“t3.退出本系統(tǒng)n”); printf(“t請(qǐng)選擇服務(wù)類別:”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3)//輸入數(shù)不等于選項(xiàng)的時(shí)候打印畫(huà)面 { printf(“nt輸入出錯(cuò)!請(qǐng)重新選擇~n”); printf(“nt按任意鍵返回選擇頁(yè)面~nt”); getchar();getchar(); system(“cls”); } if(input==3)//如果輸入3退出系統(tǒng) { 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請(qǐng)選擇服務(wù)種類:”); scanf(“%d”,&in); if(in!=1&&in!=2&&in!=3&&in!=4&&in!=5) { printf(“nt沒(méi)有這項(xiàng)服務(wù)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()//學(xué)生登錄菜單 { void c_select(); void c_view(); void c_searchs(); void login(); int input; do { system(“cls”); printf(“nnnt--學(xué)生登陸--”); printf(“nnt1.學(xué)生選課n”); printf(“t2.課程瀏覽n”); printf(“t3.課程查詢n”); printf(“t4.退出n”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3&&input!=4) { printf(“nt沒(méi)有這項(xiàng)服務(wù)~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();//進(jìn)入學(xué)生登陸菜單 } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件讀完后關(guān)閉 } printf(“nntt請(qǐng)輸入你要選課程的編號(hào):”); 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不存在對(duì)應(yīng)課程n”); printf(“nntt繼續(xù)選課請(qǐng)按1,退出請(qǐng)按2:n”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default: printf(“輸入錯(cuò)誤,將返回登錄界面!n”); login();break; } } else { fwrite(&courses[j],sizeof(struct course),1,fp1); fclose(fp1); printf(“nntt選課成功t請(qǐng)選擇:”); printf(“nntt1.繼續(xù)選課”); 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();//進(jìn)入學(xué)生登陸菜單 } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件讀完后關(guān)閉 do { system(“cls”); if(i==1) { printf(“nnnttt沒(méi)有記錄!n”); getchar();getchar(); man_login(); } else { printf(“nt------共有%d條記錄-------”,i-1); printf(“nnt課程編號(hào): %dn”,courseview[n].c_num); printf(“nnt課程名字: %sn”,courseview[n].c_name); printf(“nnt課程學(xué)分: %dn”,courseview[n].c_score); printf(“nnt課程已選人數(shù): %dn”,courseview[n].c_nelepeo); printf(“nnt課程人數(shù)上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一頁(yè)t2.下一頁(yè)t3.回目錄”); printf(“n請(qǐng)選擇:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到達(dá)首頁(yè) t按任意鍵返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到達(dá)尾頁(yè)t按人意見(jiàn)返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{man_login();break;} default: { printf(“nt操作錯(cuò)誤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();//進(jìn)入學(xué)生登陸菜單 } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件讀完后關(guān)閉 do { system(“cls”); if(i==1) { printf(“nnnttt沒(méi)有記錄!n”); getchar();getchar(); stu_login(); } else { printf(“nt------共有%d條記錄-------”,i-1); printf(“nnt課程編號(hào): %dn”,courseview[n].c_num); printf(“nnt課程名字: %sn”,courseview[n].c_name); printf(“nnt課程學(xué)分: %dn”,courseview[n].c_score); printf(“nnt課程已選人數(shù): %dn”,courseview[n].c_nelepeo); printf(“nnt課程人數(shù)上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一頁(yè)t2.下一頁(yè)t3.回目錄”); printf(“n請(qǐng)選擇:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到達(dá)首頁(yè) t按任意鍵返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到達(dá)尾頁(yè)t按人意見(jiàn)返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{stu_login();break;} default: { printf(“nt操作錯(cuò)誤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//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt請(qǐng)輸入你要查詢的課程編號(hào):”); scanf(“%d”,&id); do//檢查輸入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt課程編號(hào):%dn”,coursesear[k].c_num); printf(“nnt課程名字:%sn”,coursesear[k].c_name); printf(“nnt課程學(xué)分:%dn”,coursesear[k].c_score); printf(“nnt課程已選人數(shù):%dn”,coursesear[k].c_nelepeo); printf(“nnt課程人數(shù)上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請(qǐng)選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt沒(méi)有這項(xiàng)服務(wù)t請(qǐng)按任意鍵重新輸入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在對(duì)應(yīng)記錄n”); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請(qǐng)選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt沒(méi)有這項(xiàng)服務(wù)t請(qǐng)按任意鍵重新輸入”); 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//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt請(qǐng)輸入你要查詢的課程編號(hào):”); scanf(“%d”,&id); do//檢查輸入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt課程編號(hào):%dn”,coursesear[k].c_num); printf(“nnt課程名字:%sn”,coursesear[k].c_name); printf(“nnt課程學(xué)分:%dn”,coursesear[k].c_score); printf(“nnt課程已選人數(shù):%dn”,coursesear[k].c_nelepeo); printf(“nnt課程人數(shù)上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請(qǐng)選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt沒(méi)有這項(xiàng)服務(wù)t請(qǐng)按任意鍵重新輸入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在對(duì)應(yīng)記錄n”); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請(qǐng)選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt沒(méi)有這項(xiàng)服務(wù)t請(qǐng)按任意鍵重新輸入”); 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請(qǐng)輸入課程信息”); printf(“nntt1.課程編號(hào):”); scanf(“%d”,&course_new.c_num); printf(“nntt2.課程名字:”); scanf(“%s”,course_new.c_name); printf(“nntt3.課程學(xué)分:”); scanf(“%d”,&course_new.c_score); printf(“nntt4.課程已選人數(shù):”); scanf(“%d”,&course_new.c_nelepeo); printf(“nntt5.課程人數(shù)上限:”); 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對(duì)不起,這個(gè)編號(hào)已經(jīng)使用過(guò)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按任意鍵繼續(xù)”); getchar();getchar(); do { system(“cls”); printf(“nntt1.繼續(xù)輸入”); printf(“nntt2.返回管理菜單”); printf(“nntt請(qǐng)選擇”); 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請(qǐng)輸入你要?jiǎng)h除的課程編號(hào):”); 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不存在對(duì)應(yīng)的課程t按任意鍵返回”); getchar();getchar(); man_login(); } // printf(“nntt記錄已刪除!t按任意鍵返回ntt”); } int main(){ index();login();return 0;} C語(yǔ)言課程設(shè)計(jì) 倉(cāng)庫(kù)管理系統(tǒng) #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(“請(qǐng)輸入第1個(gè)密碼:n”);for(i=0;i<4;i++) { scanf(“%d”,&l); system(“cls”); if(l==q[i]) printf(“正確,繼續(xù)輸入第%d個(gè)密碼:.n”,i+2); else { w=0; printf(“輸入錯(cuò)誤!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(“按任意鍵進(jìn)入倉(cāng)庫(kù)管理菜單n”); getchar(); system(“cls”); system(“color F0”);printf(“ ******************************倉(cāng)庫(kù)管理*******************************n”); printf(“ * 1.錄入倉(cāng)庫(kù)初始記錄 *n”); printf(“ * 2.按倉(cāng)庫(kù)名稱查找記錄 *n”); printf(“ * 3.刪除倉(cāng)庫(kù)記錄 *n”); printf(“ * 4.修改倉(cāng)庫(kù)記錄 *n”);printf(“ * 5.增加倉(cāng)庫(kù)信息 *n”); printf(“ * 6.顯示全部記錄 *n”); printf(“ * 7.按倉(cāng)庫(kù)名稱排序 *n”); printf(“ * 8.按倉(cāng)庫(kù)面積排序 *n”); printf(“ * 9.備份 *n”);printf(“ * 0.恢復(fù) *n”);printf(“ * 10.退出 *n”); printf(“ *********************************************************************n”);do { printf(“n輸入您想要進(jìn)行的操作選項(xiàng)鍵(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請(qǐng)輸入要輸入的倉(cāng)庫(kù)數(shù)目:n”); scanf(“%d”,&n); printf(“開(kāi)始輸入倉(cāng)庫(kù)信息:n”); for(i=0;i { system(“cls”); printf(“n第%d個(gè)倉(cāng)庫(kù)的編號(hào):”,i+1); scanf(“%d”,&t[i].num); printf(“第%d個(gè)倉(cāng)庫(kù)的名稱:”,i+1); scanf(“%s”,t[i].name); printf(“第%d個(gè)倉(cāng)庫(kù)的面積:”,i+1); scanf(“%f”,&t[i].square); printf(“第%d個(gè)倉(cāng)庫(kù)的說(shuō)明:”,i+1); scanf(“%s”,t[i].introdution);} return(n);} void List(Cangku t[],int n){ int i; printf(“ *********************************************************************n”); printf(“ ** 編號(hào) 名稱 面積 說(shuō)明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(“請(qǐng)輸入要查找的倉(cāng)庫(kù)名稱:n”); scanf(“%s”,s); for(i=0;i { if(strcmp(s,t[i].name)==0) { flag=1; system(“cls”); printf(“nn要查找的倉(cāng)庫(kù)信息如下:n”); printf(“n”); printf(“ *********************************************************************n”); printf(“ ** 編號(hào) 名稱 面積 說(shuō)明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(“要查找的倉(cāng)庫(kù)不存在!n”);getchar();} int DeleteRecord(Cangku t[],int n){ char s[20]; char ch; int i,j,flag=0; system(“cls”); printf(“請(qǐng)輸入要?jiǎng)h除的倉(cāng)庫(kù)名稱n”); scanf(“%s”,s); for(i=0;i if(strcmp(s,t[i].name)==0) { flag=1; system(“cls”); printf(“nn要?jiǎng)h除的倉(cāng)庫(kù)信息如下:n”); printf(“n”); printf(“ *********************************************************************n”); printf(“ ** 編號(hào) 名稱 面積 說(shuō)明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(“確定刪除倉(cāng)庫(kù)信息嗎?(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(“要?jiǎng)h除的倉(cāng)庫(kù)不存在!n”); getchar(); return n;} int AlterRecord(Cangku t[],int n){ int i,flag=0; char s[20],ch; system(“cls”); printf(“請(qǐng)輸入要修改的倉(cāng)庫(kù)名稱n”); scanf(“%s”,s); for(i=0;i { if(strcmp(s,t[i].name)==0) { flag=1; system(“cls”); printf(“nn要修改的倉(cāng)庫(kù)信息如下:n”); printf(“n”); printf(“ *********************************************************************n”); printf(“ ** 編號(hào) 名稱 面積 說(shuō)明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(“確定修改倉(cāng)庫(kù)信息嗎?(Y/N)n”); ch=getchar(); ch=getchar(); if(ch=='y'||ch=='Y') { system(“cls”); printf(“請(qǐng)輸入修改后的信息:n”); printf(“請(qǐng)輸入倉(cāng)庫(kù)新的名稱:”); scanf(“%s”,t[i].name); printf(“請(qǐng)輸入%s倉(cāng)庫(kù)新的編號(hào):”,t[i].name); scanf(“%d”,&t[i].num); printf(“請(qǐng)輸入%s倉(cāng)庫(kù)新的面積:”,t[i].name); scanf(“%f”,&t[i].square); printf(“請(qǐng)輸入%s倉(cāng)庫(kù)新的說(shuō)明:”,t[i].name); scanf(“%s”,t[i].introdution); } } } if(flag==0) printf(“要修改的倉(cāng)庫(kù)不存在!n”); getchar(); return n;} int AddRecord(Cangku t[],int n){ int i,m; system(“cls”); printf(“n請(qǐng)輸入再增加的記錄數(shù):n”); scanf(“%d”,&m); printf(“開(kāi)始追加記錄n”); for(i=n;i { system(“cls”); printf(“n第%d個(gè)倉(cāng)庫(kù)的編號(hào):”,i+1); scanf(“%d”,&t[i].num); printf(“第%d個(gè)倉(cāng)庫(kù)的名稱:”,i+1); scanf(“%s”,t[i].name); printf(“第%d個(gè)倉(cāng)庫(kù)的面積:”,i+1); scanf(“%f”,&t[i].square); printf(“第%d個(gè)倉(cāng)庫(kù)的說(shuō)明:”,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(“排序后倉(cāng)庫(kù)信息列表如下: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(“排序后倉(cāng)庫(kù)信息列表如下:n”); List(t,n);} void SaveRecord(Cangku t[],int n){ int i; FILE *fp; if((fp=fopen(“record.txt”,“w”))==NULL) { printf(“不能打開(kāi)文件!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(“不能打開(kāi)文件!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(“不能打開(kāi)文件!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(“不能打開(kāi)文件!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(“不能打開(kāi)文件!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(“不能打開(kāi)文件!n”); exit(1);} for(i=0;i { fwrite(&t[i],sizeof(struct cangku),1,fp); } fclose(fp); printf(“恢復(fù)成功.n”);}1第三篇:語(yǔ)言課程設(shè)計(jì)-學(xué)生成績(jī)管理系統(tǒng)
第四篇:C語(yǔ)言課程設(shè)計(jì)學(xué)生選課系統(tǒng)
第五篇:C語(yǔ)言課程設(shè)計(jì) 倉(cāng)庫(kù)管理系統(tǒng)