239編程
❶ 300行c++代碼編程實例
#include #include #include void select(); /*自定義函數的全局聲明*/ void input(); void output(); void sort(); void search(); void modify(); void deleted(); void save(); void load(); struct student { int number; char name[9]; char sex; char xy[20]; char zy[20]; int classes; double jcj; double pcj; double zcj; }; struct student a[40]; void main() { select(); //調用選擇函數 } void select() { int n; system("cls"); printf("|--------------------------------------------------------------|\n"); printf("| 主菜單 |\n"); printf("| 1. 輸入功能 |\n"); printf("| 2. 輸出功能 |\n"); printf("| 3. 排序功能 |\n"); printf("| 4. 查詢功能 |\n"); printf("| 5. 修改功能 |\n"); printf("| 6. 刪除功能 |\n"); printf("| 7. SAVE功能 |\n"); printf("| 8. LOAD功能 |\n"); printf("| 9. 退出程序 |\n"); printf("|--------------------------------------------------------------|\n"); printf(" 請你選擇功能:"); scanf("%d",&n); switch(n) { case 1: input();select();break; /*當調用完輸入函數之後,回到主菜單的函數select函數*/ case 2: output();select();break; case 3: sort();select();break; case 4: search();select();break; case 5: modify();select();break; case 6: deleted();select();break; case 7: save();select();break; case 8: load();select();break; case 9: exit(0);break; } getchar(); getchar(); system("pause"); } void input() { int i,n; system("cls"); printf(" welcome to 輸入功能\n\n\n"); for(i=0;i<=39;i++) { printf("------------------------------------------------------------|\n"); printf("| 是否要給1個同學做信息的輸入 |\n"); printf("| 1. 輸入 |\n"); printf("| 2. 結束輸入 |\n"); printf("------------------------------------------------------------|\n"); printf(" 請你輸入你的選擇:"); scanf("%d",&n); if(n==2) break; printf("學號:"); scanf("%d",&a[i].number); getchar(); printf("姓名:"); gets(a[i].name); printf("性別:"); a[i].sex=getchar(); getchar(); printf("學院:"); gets(a[i].xy); printf("專業:"); gets(a[i].zy); printf("班級:"); scanf("%d",&a[i].classes); printf("卷面成績:"); scanf("%lf",&a[i].jcj); printf("平時成績:"); scanf("%lf",&a[i].pcj); } getchar(); getchar(); system("pause"); } void output() { int i; system("cls"); printf(" welcome to 輸出功能\n\n\n"); printf("%-9s","學號"); printf("%-9s","姓名"); printf("%-5s","性別"); printf("%-20s","學院"); printf("%-20s","專業"); printf("%-5s","班級"); printf("%-9s","卷面成績"); printf("%-9s","平時成績"); printf("%-9s","總成績"); printf("\n"); for(i=0;i<=39;i++) { a[i].zcj=a[i].jcj*0.6+a[i].pcj; if(a[i].number == 0) break; printf("%-9d",a[i].number); printf("%-9s",a[i].name); printf("%-5c",a[i].sex); printf("%-20s",a[i].xy); printf("%-20s",a[i].zy); printf("%-5d",a[i].classes); printf("%-9.2lf",a[i].jcj); printf("%-9.2lf",a[i].pcj); printf("%-9.2lf",a[i].zcj); printf("\n"); } getchar(); getchar(); system("pause"); } void sort() { int i,j,n; struct student t; system("cls"); printf(" welcome to 排序功能\n\n\n"); printf("------------------------------------------------------------|\n"); printf("| 排序菜單 |\n"); printf("| 1. 按總分總高到低排序輸出 |\n"); printf("| 2. 按總分總低到高排序輸出 |\n"); printf("| 3. 退出排序功能 |\n"); printf("------------------------------------------------------------|\n"); printf(" 請你輸入你的選擇:"); scanf("%d",&n); switch(n) { case 1: for(j=38;j>=0;j--) { for(i=0;i<=j;i++) { if(a[i].number == 0 || a[i+1].number == 0) break; else { if(a[i].zcj < a[i+1].zcj) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } } break; case 2: for(j=38;j>=0;j--) { for(i=0;i<=j;i++) { if(a[i].number == 0 || a[i+1].number == 0) break; else { if(a[i].zcj > a[i+1].zcj) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } } break; case 3: select(); break; } printf("%-9s","學號"); printf("%-9s","姓名"); printf("%-5s","性別"); printf("%-20s","學院"); printf("%-20s","專業"); printf("%-5s","班級"); printf("%-9s","卷面成績"); printf("%-9s","平時成績"); printf("%-9s","總成績"); printf("\n"); for(i=0;i<=39;i++) { a[i].zcj=a[i].jcj*0.6+a[i].pcj; if(a[i].number == 0) break; printf("%-9d",a[i].number); printf("%-9s",a[i].name); printf("%-5c",a[i].sex); printf("%-20s",a[i].xy); printf("%-20s",a[i].zy); printf("%-5d",a[i].classes); printf("%-9.2lf",a[i].jcj); printf("%-9.2lf",a[i].pcj); printf("%-9.2lf",a[i].zcj); printf("\n"); } getchar(); getchar(); system("pause"); } void search() { int i,n; char search_name[9]; system("cls"); printf(" welcome to 查詢功能\n\n\n"); printf("------------------------------------------------------------|\n"); printf("| 查詢菜單 |\n"); printf("| 1. 按姓名查詢 |\n"); printf("| 2. 按性別查詢 |\n"); printf("| 3. 按學號查詢 |\n"); printf("| 4. 按專業查詢 |\n"); printf("| 5. 按學院查詢 |\n"); printf("| 6. 按總成績及格同學查詢 |\n"); printf("| 7. 退出查詢功能 |\n"); printf("------------------------------------------------------------|\n"); printf(" 請你輸入你的選擇:"); scanf("%d",&n); getchar(); switch(n) { case 1: printf("\n\n\n請你輸入要查詢某同學的姓名:"); gets(search_name); printf("%-9s","學號"); printf("%-9s","姓名"); printf("%-5s","性別"); printf("%-20s","學院"); printf("%-20s","專業"); printf("%-5s","班級"); printf("%-9s","卷面成績"); printf("%-9s","平時成績"); printf("%-9s","總成績"); printf("\n"); for(i=0;i<=39;i++) { if(a[i].number==0) break; else { if(strcmp(a[i].name,search_name) == 0) { printf("%-9d",a[i].number); printf("%-9s",a[i].name); printf("%-5c",a[i].sex); printf("%-20s",a[i].xy); printf("%-20s",a[i].zy); printf("%-5d",a[i].classes); printf("%-9.2lf",a[i].jcj); printf("%-9.2lf",a[i].pcj); printf("%-9.2lf",a[i].zcj); printf("\n"); } } } break; case 2: break; } getchar(); getchar(); system("pause"); } void modify() { int i,n,m; int modify_number; /* 輸入修改對象的學號*/ system("cls"); printf(" welcome to 修改功能\n\n\n"); printf("------------------------------------------------------------|\n"); printf("| 修改菜單 |\n"); printf("| 1. 修改全部信息 |\n"); printf("| 2. 修改具體某項信息 |\n"); printf("| 3. 退出修改功能 |\n"); printf("------------------------------------------------------------|\n"); printf(" 請你輸入你的選擇:"); scanf("%d",&n); getchar(); switch(n) { case 1: printf("\n\n請你輸入你要修改的對象的學號:"); scanf("%d",&modify_number); for(i=0;i<=39;i++) { if(modify_number == a[i].number) { printf("學號:"); scanf("%d",&a[i].number); getchar(); printf("姓名:"); gets(a[i].name); printf("性別:"); a[i].sex=getchar(); getchar(); printf("學院:"); gets(a[i].xy); printf("專業:"); gets(a[i].zy);
❷ c語言 學生成績管理系統
我找的一個代碼!試一下:
c語言學生成績管理系統
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 學號 */
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新時間 */
};
typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;
void menu()
{
printf("********************************************************************************");
printf("\t1登記學生資料\t\t\t\t\t2刪除學生資料\n");
printf("\t3查詢學生資料\t\t\t\t\t4修改學生資料\n");
printf("\t5保存學生資料\t\t\t\t\t0退出系統\n");
printf("********************************************************************************\n");
}
void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:輸入錯誤!\n");
}
void Nofind()
{
printf("\n=====>提示:沒有找到該學生!\n");
}
void printc() /* 本函數用於輸出中文 */
{
printf(" 學號\t 姓名 性別 英語成績 數學成績 C語言成績 總分 平均分\n");
}
void printe(Node *p)/* 本函數用於輸出英文 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}
Node* Locate(Link l,char findmess[],char nameornum[]) /* 該函數用於定位連表中符合要求的接點,並返回該指針 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按學號查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}
void Add(Link l) /* 增加學生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 將指針置於最末尾 */
while(1)
{
printf("請你輸入學號(以'0'返回上一級菜單:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:學號為'%s'的學生已經存在,若要修改請你選擇'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}
p=(Node *)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("請你輸入姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入性別:");
scanf("%s",p->data.sex);
getchar();
printf("請你輸入c語言成績:");
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入數學成績:");
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入英語成績:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息輸入已經完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}
void Qur(Link l) /* 查詢學生 */
{
int sel;
char findmess[20];
Node *p;
if(!l->next)
{
printf("\n=====>提示:沒有資料可以查詢!\n");
return;
}
printf("\n=====>1按學號查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 學號 */
{
printf("請你輸入要查找的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("請你輸入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
void Del(Link l) /* 刪除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以刪除!\n");
return;
}
printf("\n=====>1按學號刪除\n=====>2按姓名刪除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("請你輸入要刪除的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("請你輸入要刪除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}
void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以修改!\n");
return;
}
printf("請你輸入要修改的學生學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("請你輸入新學號(原來是%s):",p->data.num);
scanf("%s",p->data.num);
printf("請你輸入新姓名(原來是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("請你輸入新性別(原來是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("請你輸入新的c語言成績(原來是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入新的數學成績(原來是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入新的英語成績(原來是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:資料修改成功!\n");
shoudsave=1;
}
else
Nofind();
}
void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;
if(!p)
{
printf("\n=====>提示:沒有資料可以顯示!\n");
return;
}
printf("\t\t\t\t顯示結果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}
void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用於指向分數最高的接點 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:沒有資料可以統計!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;
r=r->next;
}
printf("------------------------------統計結果--------------------------------\n");
printf("總分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);
printf("英語最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("數學最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c語言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}
void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;
ll=(Link)malloc(sizeof(Node)); /* 用於做新的連表 */
ll->next=NULL;
if(l->next==NULL)
{
printf("\n=====>提示:沒有資料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接點用於保存信息 */
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已經完成!\n");
}
void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打開文件時發生錯誤!\n");
exit(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d條記錄已經保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}
void main()
{
Link l;/* 連表 */
FILE *fp; /* 文件指針 */
int sel;
char ch;
char jian;
int count=0;
Node *p,*r;
printf("\t\t\t\t學生成績管理系統\n\t\t\t\t-------福建農業職業學院計應0501 黃歡(32號)\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件還不存在,是否創建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已經打開,正在導入記錄......\n");
while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 將文件的內容放入接點中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點掛入連中 */
count++;
}
}
fclose(fp); /* 關閉文件 */
printf("\n=====>提示:記錄導入完畢,共導入%d條記錄.\n",count);
while(1)
{
menu();
printf("請你選擇操作:");
scanf("%d",&sel);
if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:資料已經改動,是否將改動保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已經退出系統,再見!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加學生 */
case 2:Del(l);break;/* 刪除學生 */
case 3:Qur(l);break;/* 查詢學生 */
case 4:Modify(l);break;/* 修改學生 */
case 5:Save(l);break;/* 保存學生 */
case 9:printf("\t\t\t==========幫助信息==========\n");break;
default: Wrong();getchar();break;
}
}
}
/* */
/*
學生成績管理程序
編制一個統計學生考試分數的管理程序。
設學生成績已以一個學生一個記錄的形式存儲在文件中,
每位學生記錄包含的信息有:姓名,學號和各門功課的成績。
程序具有以下幾項功能:求出各門課程的總分,平均分,按姓名,
按學號尋找其記錄並顯示,瀏覽全部學生成績和按總分由高到低顯示學生信息等。
*/
#include <stdio.h>
#define SWN 3 /* 課程數 */
#define NAMELEN 20 /* 姓名最大字元數 */
#define CODELEN 10 /* 學號最大字元數 */
#define FNAMELEN 80 /* 文件名最大字元數 */
#define BUFLEN 80 /* 緩沖區最大字元數 */
/* 課程名稱表 */
char schoolwork[SWN][NAMELEN+1] = {"Chinese","Mathematic","English"};
struct record
{
char name[NAMELEN+1]; /* 姓名 */
char code[CODELEN+1]; /* 學號 */
int marks[SWN]; /* 各課程成績 */
int total; /* 總分 */
}stu;
struct node
{
char name[NAMELEN+1]; /* 姓名 */
char code[CODELEN+1]; /* 學號 */
int marks[SWN]; /* 各課程成績 */
int total; /* 總分 */
struct node *next; /* 後續表元指針 */
}*head; /* 鏈表首指針 */
int total[SWN]; /* 各課程總分 */
FILE *stfpt; /* 文件指針 */
char stuf[FNAMELEN]; /* 文件名 */
/* 從指定文件讀入一個記錄 */
int readrecord(FILE *fpt,struct record *rpt)
{
char buf[BUFLEN];
int i;
if(fscanf(fpt,"%s",buf)!=1)
return 0; /* 文件結束 */
strncpy(rpt->name,buf,NAMELEN);
fscanf(fpt,"%s",buf);
strncpy(rpt->code,buf,CODELEN);
for(i=0;i<SWN;i++)
fscanf(fpt,"%d",&rpt->marks[i]);
for(rpt->total=0,i=0;i<SWN;i++)
rpt->total+=rpt->marks[i];
return 1;
}
/* 對指定文件寫入一個記錄 */
writerecord(FILE *fpt,struct record *rpt)
{
int i;
fprintf(fpt,"%s\n",rpt->name);
fprintf(fpt,"%s\n",rpt->code);
for(i=0;i<SWN;i++)
fprintf(fpt,"%d\n",rpt->marks[i]);
return ;
}
/* 顯示學生記錄 */
displaystu(struct record *rpt)
{
int i;
printf("\nName : %s\n",rpt->name);
printf("Code : %s\n",rpt->code);
printf("Marks :\n");
for(i=0;i<SWN;i++)
printf(" %-15s : %4d\n",schoolwork[i],rpt->marks[i]);
printf("Total : %4d\n",rpt->total);
}
/* 計算各單科總分 */
int totalmark(char *fname)
{
FILE *fp;
struct record s;
int count,i;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
for(i=0;i<SWN;i++)
total[i]=0;
count=0;
while(readrecord(fp,&s)!=0)
{
for(i=0;i<SWN;i++)
total[i]+=s.marks[i];
count++;
}
fclose(fp);
return count; /* 返回記錄數 */
}
/* 列表顯示學生信息 */
void liststu(char *fname)
{
FILE *fp;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return ;
}
while(readrecord(fp,&s)!=0)
{
displaystu(&s);
printf("\n Press ENTER to continue...\n");
while(getchar()!='\n');
}
fclose(fp);
return;
}
/* 構造鏈表 */
struct node *makelist(char *fname)
{
FILE *fp;
struct record s;
struct node *p,*u,*v,*h;
int i;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return NULL;
}
h=NULL;
p=(struct node *)malloc(sizeof(struct node));
while(readrecord(fp,(struct record *)p)!=0)
{
v=h;
while(v&&p->total<=v->total)
{
u=v;
v=v->next;
}
if(v==h)
h=p;
else
u->next=p;
p->next=v;
p=(struct node *)malloc(sizeof(struct node));
}
free(p);
fclose(fp);
return h;
}
/* 順序顯示鏈表各表元 */
void displaylist(struct node *h)
{
while(h!=NULL)
{
displaystu((struct record *)h);
printf("\n Press ENTER to continue...\n");
while(getchar()!='\n');
h=h->next;
}
return;
}
/* 按學生姓名查找學生記錄 */
int retrievebyn(char *fname, char *key)
{
FILE *fp;
int c;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
c=0;
while(readrecord(fp,&s)!=0)
{
if(strcmp(s.name,key)==0)
{
displaystu(&s);
c++;
}
}
fclose(fp);
if(c==0)
printf("The student %s is not in the file %s.\n",key,fname);
return 1;
}
/* 按學生學號查找學生記錄 */
int retrievebyc(char *fname, char *key)
{
FILE *fp;
int c;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
c=0;
while(readrecord(fp,&s)!=0)
{
if(strcmp(s.code,key)==0)
{
displaystu(&s);
c++;
break;
}
}
fclose(fp);
if(c==0)
printf("The student %s is not in the file %s.\n",key,fname);
return 1;
}
main()
{
int i,j,n;
char c;
char buf[BUFLEN];
FILE *fp;
struct record s;
clrscr();
printf("Please input the students marks record file's name: ");
scanf("%s",stuf);
if((fp=fopen(stuf,"r"))==NULL)
{
printf("The file %s doesn't exit, do you want to creat it? (Y/N) ",stuf);
getchar();
c=getchar();
if(c=='Y'||c=='y')
{
fp=fopen(stuf,"w");
printf("Please input the record number you want to write to the file: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Input the student's name: ");
scanf("%s",&s.name);
printf("Input the student's code: ");
scanf("%s",&s.code);
for(j=0;j<SWN;j++)
{
printf("Input the %s mark: ",schoolwork[j]);
scanf("%d",&s.marks[j]);
}
writerecord(fp,&s);
}
fclose(fp);
}
}
fclose(fp);
getchar();
/*clrscr();*/
puts("Now you can input a command to manage the records.");
puts("m : mean of the marks.");
puts("t : total of the marks.");
puts("n : search record by student's name.");
puts("c : search record by student's code.");
puts("l : list all the records.");
puts("s : sort and list the records by the total.");
puts("q : quit!");
while(1)
{
puts("Please input command:");
scanf(" %c",&c); /* 輸入選擇命令 */
if(c=='q'||c=='Q')
{
puts("\n Thank you for your using.");
break; /* q,結束程序運行 */
}
switch(c)
{
case 'm': /* 計算平均分 */
case 'M':
if((n=totalmark(stuf))==0)
{
puts("Error!");
break;
}
printf("\n");
for(i=0;i<SWN;i++)
printf("%-15s's average is: %.2f.\n",schoolwork[i],(float)total[i]/n);
break;
case 't': /* 計算總分 */
case 'T':
if((n=totalmark(stuf))==0)
{
puts("Error!");
break;
}
printf("\n");
for(i=0;i<SWN;i++)
printf("%-15s's total mark is: %d.\n",schoolwork[i],total[i]);
break;
case 'n': /* 按學生的姓名尋找記錄 */
case 'N':
printf("Please input the student's name you want to search: ");
scanf("%s",buf);
retrievebyn(stuf,buf);
break;
case 'c': /* 按學生的學號尋找記錄 */
case 'C':
printf("Please input the student's code you want to search: ");
scanf("%s",buf);
retrievebyc(stuf,buf);
break;
case 'l': /* 列出所有學生記錄 */
case 'L':
liststu(stuf);
break;
case 's': /* 按總分從高到低排列顯示 */
case 'S':
if((head=makelist(stuf))!=NULL)
displaylist(head);
break;
default: break;
}
}
}
❸ Visual C++典型模塊與項目實戰大全的目錄
《visual c++典型模塊與項目實戰大全》
第1篇 visual c++項目開發基礎
第1章 vc++ 6.0程序設計簡介 2
教學視頻:11分鍾
1.1 visual c++ 6.0集成開發環境 2
1.1.1 vc++ 6.0集成開發環境菜單欄及工具欄簡介 3
1.1.2 vc++ 6.0集成開發環境工作區簡介 3
1.2 visual c++ 6.0的「hello world!」 4
1.2.1 vc++ 6.0可創建的工程簡介 5
1.2.2 創建基於win32 console application的「hello world!」 6
1.2.3 創建基於mfc app wizard(exe)的「hello world!」 7
1.3 vc++集成開發環境使用技巧 8
1.3.1 快速定位 8
1.3.2 快速格式化一段源代碼 9
1.3.3 從工程中徹底刪除一個類 10
1.3.4 在vc++中設置頭文件和庫文件 10
1.3.5 在工作區導入多個項目 10
1.4 vc++集成開發環境常見問題及解決方法 11
1.4.1 工程文件簡介 11
1.4.2 常見問題及解決方法 12
.1.5 小結 13
第2章 c++編程基礎 14
教學視頻:25分鍾
2.1 變數 14
2.1.1 標識 14
2.1.2 基本數據類型 15
2.1.3 變數的聲明 16
2.2 操作、運算符 16
2.2.1 賦值運算 16
2.2.2 算術運算 17
2.2.3 邏輯運算 18
2.2.4 關系運算 19
2.2.5 位操作運算 19
2.2.6 條件操作運算 20
2.2.7 其他操作運算 20
2.2.8 運算符優先順序 22
2.3 控制結構 22
2.3.1 條件控制結構 23
2.3.2 循環控制結構 23
2.3.3 選擇控制結構 25
2.3.4 分支跳轉控制結構 25
2.4 函數 26
2.5 類 26
2.5.1 類的成員變數和成員函數 27
2.5.2 類的繼承 28
2.6 小結 29
第2篇 典型模塊開發
第3章 桌面時鍾(gdi實現) 32
教學視頻:64分鍾
3.1 桌面時鍾界面簡介 32
3.2 桌面時鍾的功能簡介 33
3.2.1 桌面時鍾界面控制功能簡介 33
3.2.2 桌面時鍾時間設置功能簡介 36
3.3 控制項知識 37
3.4 實現桌面時鍾的關鍵技術 39
3.4.1 gdi基礎知識簡介 39
3.4.2 gdi編程基礎簡介 40
3.5 gdi的基礎類 40
3.5.1 cdc類 40
3.5.2 畫筆類(線色類) 41
3.5.3 畫刷類(面色類) 43
3.5.4 字體類 45
3.5.5 點類 46
3.5.6 大小類 47
3.5.7 矩形類 47
3.6 gdi繪制像素點的實際應用 49
3.7 gdi繪制線條的實際應用 50
3.7.1 gdi繪制直線的函數 50
3.7.2 用畫筆繪制線的步驟 52
3.7.3 繪制線條的示例 53
3.8 gdi繪制填充圖的實際應用 58
3.8.1 矩形填充圖 58
3.8.2 扇形填充圖 59
3.8.3 填充拖動矩形 60
3.8.4 填充區域 63
3.9 gdi輸出字體的實際應用 65
3.10 表盤模塊的設計與實現 66
3.10.1 表盤設置模塊 66
3.10.2 表盤的繪制模塊 68
3.11 表針模塊的設計與實現 73
3.11.1 表針設置模塊 73
3.11.2 表針繪制模塊 75
3.12 數字時鍾模塊的設計與實現 77
3.12.1 數字時鍾設置模塊 77
3.12.2 數字時鍾繪制模塊 79
3.13 數字日期模塊的設計與實現 82
3.14 背景模塊的設計與實現 86
3.15 鬧鈴模塊的設計與實現 87
3.15.1 蜂鳴器音樂選擇及播放模塊 88
3.15.2 鬧鈴設置主模塊 89
3.16 系統時間設置模塊的設計與實現 91
3.17 主界面模塊的設計與實現 92
3.17.1 主窗體界面模塊的設計與實現 92
3.17.2 主窗體功能模塊的設計與實現 94
3.17.3 主窗體控制模塊的設計與實現 97
3.18 小結 102
第4章 電子郵件收發管理器(jmail+自定義按鈕) 103
教學視頻:58分鍾
4.1 電子郵件收發管理器簡介 103
4.1.1 主程序簡介 103
4.1.2 郵箱設置信息功能簡介 104
4.1.3 收件箱功能簡介 104
4.1.4 發件箱功能簡介 105
4.1.5 資源管理器技術簡介 106
4.2 自定義的按鈕控制項 107
4.2.1 定義一個新類繼承於cbutton 107
4.2.2 定製按鈕的背景圖像 108
4.2.3 為按鈕添加聲音 115
4.2.4 重載滑鼠事件 117
4.3 定製具有個性背景圖像的對話框 120
4.4 實現電子郵件收發管理器的關鍵技術 122
4.4.1 jmail的基礎知識 122
4.4.2 接收郵件 123
4.4.3 發送郵件 124
4.5 電子郵件收發管理器的實現 126
4.5.1 主窗體的設計與實現 126
4.5.2 設置模塊的設計與實現 130
4.5.3 收件箱模塊的設計與實現 130
4.5.4 寫郵件模塊的設計與實現 135
4.6 小結 138
第5章 系統資源管理器(文件操作+文件檢索+多線程) 139
教學視頻:32分鍾
5.1 系統資源管理器簡介 139
5.1.1 樹形結構瀏覽系統文件資源 139
5.1.2 列表視圖顯示指定目錄下的文件資源 139
5.1.3 搜索文件 140
5.1.4 資源管理器的技術簡介 140
5.2 樹形視圖控制項 141
5.2.1 建立樹形視圖控制項工程 141
5.2.2 為樹形視圖添加名為「根節點」的節點 141
5.2.3 為樹形視圖插入多層節點 142
5.2.4 為樹形視圖添加圖像列表 143
5.2.5 設置樹形視圖的顯示風格 144
5.2.6 為樹形視圖添加項目選中處理函數 145
5.2.7 為樹形視圖添加項目展開處理函數 146
5.3 列表型視圖控制項 147
5.3.1 創建一個列表視圖工程 147
5.3.2 為列表型視圖添加圖像列表 147
5.3.3 為列表型視圖添加新項目 148
5.3.4 為列表型視圖添加項目雙擊事件 148
5.4 windows文件系統的基礎知識 149
5.5 shell命名空間中對象的標識方法 150
5.5.1 文件標識簡介 150
5.5.2 什麼是文件標識列表 150
5.5.3 什麼是文件標識列表指針 150
5.5.4 文件標識列表指針的常用處理函數 151
5.6 通過shell介面遍歷系統文件和文件夾 153
5.6.1 ishellfolder介面的主要方法 153
5.6.2 ienumidlist介面的主要方法 154
5.6.3 遍歷文件系統的步驟 155
5.7 系統資源管理器的實現過程簡介 155
5.8 主框架模塊的設計實現 156
5.8.1 為主框架訂制工具欄 156
5.8.2 分割視圖區 156
5.9 樹形視圖顯示文件系統 157
5.9.1 初始化樹形控制項 157
5.9.2 實現獲取itemidlist文件名稱的功能 158
5.9.3 實現填充樹形控制項的功能 160
5.9.4 實現展開樹形控制項節點的功能 162
5.9.5 實現樹形控制項節點切換的功能 163
5.9.6 實現獲取文件的系統圖標 164
5.10 列表視圖顯示系統文件 165
5.10.1 初始化列表視圖 165
5.10.2 實現樹形視圖項目添加的功能 165
5.10.3 執行滑鼠雙擊對象 168
5.11 路徑的前進、後退與向上操作的實現 170
5.11.1 路徑的前進、後退操作的實現 171
5.11.2 路徑的向上操作 174
5.12 文件查找模塊的實現 174
5.12.1 添加並實現文件查找類 174
5.12.2 文件查找界面設計與實現 178
5.12.3 文件查找控制項屬性 179
5.12.4 實現文件查找功能 179
5.13 小結 183
第6章 系統任務管理工具(系統監控+系統進程) 184
教學視頻:23分鍾
6.1 任務管理器簡介 184
6.1.1 應用程序管理模塊 184
6.1.2 進程管理模塊 184
6.1.3 性能監測模塊 185
6.1.4 任務管理器的技術簡介 185
6.2 控制項知識 186
6.2.1 tab控制項的使用 186
6.2.2 list控制項用作report 187
6.3 實現系統任務管理的關鍵技術 187
6.3.1 如何獲取應用程序信息 187
6.3.2 如何獲取系統進程信息 188
6.3.3 如何啟動、停止進程 189
6.3.4 如何獲取內存信息 190
6.3.5 如何獲取cpu信息 190
6.4 主框架模塊的設計實現 193
6.4.1 設計主窗體菜單欄 193
6.4.2 文件菜單功能實現 194
6.4.3 關機菜單功能實現 194
6.4.4 實現tab控制項的功能 196
6.5 應用程序監控模塊的實現 198
6.5.1 添加並設置列表控制項 198
6.5.2 檢測系統啟動的應用程序 198
6.5.3 實現應用程序實時監測功能 200
6.5.4 實現應用程序的控制功能 200
6.6 進程監控模塊的實現 202
6.6.1 添加並設置列表控制項 202
6.6.2 監測當前的進程信息 202
6.6.3 實現進程的實時監測 205
6.6.4 實現關閉指定進程的功能 206
6.7 內存監測模塊的實現 207
6.8 cpu監測模塊的實現 213
6.9 小結 217
第7章 ftp客戶端程序(internet會話+ftp技術) 218
教學視頻:29分鍾
7.1 ftp客戶端程序簡介 218
7.1.1 樹形結構瀏覽本地系統文件資源 218
7.1.2 列表視圖顯示ftp伺服器上的文件資源 218
7.1.3 拖放實現文件的上傳與下載 218
7.1.4 資源管理器的技術簡介 220
7.2 控制項知識 221
7.2.1 製作浮動對話框 221
7.2.2 為浮動對話框的控制項添加處理事件 222
7.2.3 樹形視圖項目的拖動 223
7.2.4 列表視圖項目的拖動 226
7.3 實現ftp客戶端的關鍵技術 228
7.3.1 cinternetsession類 228
7.3.2 ftpconnection類 229
7.4 ftp客戶端程序的模塊實現 230
7.4.1 ftp連接模塊的設計實現 230
7.4.2 獲取ftp當前路徑下的所有文件信息 233
7.4.3 ftp客戶端文件下載模塊 236
7.4.4 ftp客戶端文件上傳模塊 237
7.5 小結 238
第8章 音樂播放器(active movie control object控制項+不規則按鈕+托盤) 239
教學視頻:37分鍾
8.1 音樂播放器簡介 239
8.1.1 打開音樂文件 239
8.1.2 播放音樂的功能 240
8.1.3 暫停播放及停止播放功能 240
8.1.4 循環播放功能 241
8.1.5 調節音量大小 241
8.1.6 將播放器最小化到托盤 241
8.1.7 音頻播放器的技術簡介 241
8.2 slider控制項 242
8.2.1 用作標識進度的slider控制項 242
8.2.2 調節音量的slider控制項 243
8.3 定製不規則的按鈕控制項 244
8.3.1 自定義按鈕類 244
8.3.2 自定義按鈕的構造及析構的實現 246
8.3.3 創建不規則按鈕的方法 246
8.3.4 實現不規則按鈕的幾個重要方法 248
8.3.5 為不規則按鈕添加背景圖像 249
8.3.6 實現按鈕的狀態背景圖像 250
8.3.7 實現添加按鈕標題及邊框的功能 251
8.3.8 實現繪制按鈕的功能 253
8.3.9 處理按鈕的滑鼠事件 254
8.3.10 滑鼠狀態決斷及點測試功能的實現 255
8.3.11 自定義不規則按鈕的實現實例 256
8.4 實現音樂播放器的關鍵技術 258
8.4.1 active movie control object控制項 258
8.4.2 音樂播放器最小化到托盤的實現方法 260
8.5 音樂播放器的界面設計 262
8.5.1 創建播放器工程 262
8.5.2 設計並載入播放器背景圖像 263
8.5.3 定製並添加不規則按鈕 264
8.6 音樂播放器的功能設計與實現 265
8.6.1 設計播放器的屬性變數 265
8.6.2 利用向導添加功能函數 266
8.6.3 實現打開音頻文件的功能 266
8.6.4 實現開始播放音樂的功能 267
8.6.5 實現暫停播放音樂的功能 267
8.6.6 實現停止播放音樂的功能 268
8.6.7 實現循環播放音樂的功能 268
8.6.8 實現最小化播放器的功能 268
8.6.9 實現關閉播放器的功能 269
8.6.10 處理托盤圖標消息 269
8.6.11 實現播放器的拖動功能 270
8.6.12 實現播放器的音量控制功能 270
8.6.13 繪制播放器界面 271
8.6.14 監控音樂的播放器進度 273
8.7 小結 274
第9章 視頻播放器(directshow技術) 275
教學視頻:37分鍾
9.1 視頻播放器簡介 275
9.1.1 視頻播放器功能總述 275
9.1.2 打開視頻文件 276
9.1.3 播放控制功能簡介 276
9.1.4 視頻播放器的技術簡介 277
9.2 擴展cstatic控制項類 277
9.2.1 重寫presubclasswindow()函數 278
9.2.2 重寫defwindowproc()函數 279
9.2.3 實現控制項的拖曳功能 280
9.3 擴展csliderctrl控制項類 281
9.4 directshow在vc++ 6.0下的環境搭建 282
9.4.1 directshow的安裝環境 282
9.4.2 directshow的參考文檔 282
9.4.3 編譯baseclasses 282
9.4.4 配置directshow針對所有項目的環境 283
9.4.5 引入項目所需要的directshow庫文件 284
9.5 directshow簡介 284
9.5.1 directx組件簡介 285
9.5.2 directshow系統組成 285
9.5.3 directshow開發簡單媒體播放器的過程 287
9.6 directshow介面管理類 288
9.6.1 實例化過濾器圖表管理器 289
9.6.2 創建過濾器圖表 290
9.6.3 過濾器圖表中多媒體數據流方法的介面 290
9.6.4 處理過濾器圖表的事件介面 291
9.6.5 視頻特性設置介面 292
9.6.6 音頻流的音量和平衡控制介面 293
9.6.7 播放器窗口的屬性設置介面 294
9.6.8 搜索數據流位置和設置播放速率的介面 295
9.6.9 釋放介面指針 296
9.7 工具條及狀態欄模塊的實現 297
9.7.1 工具條及狀態欄模塊界面的設計與實現 298
9.7.2 添加界面控制項變數 298
9.7.3 綁定過濾器圖表管理器 298
9.7.4 初始化工具欄 299
9.7.5 調整工具欄的位置 300
9.7.6 繪制狀態欄 300
9.7.7 實現進度條功能 302
9.7.8 實現聲音控制功能 303
9.7.9 功能按鈕使能控制 303
9.8 播放器主窗體的設計與實現 303
9.8.1 播放器主窗體的界面設計與實現 304
9.8.2 主窗體初始化模塊的設計與實現 305
9.8.3 播放窗口消息處理模塊的設計與實現 307
9.8.4 菜單消息處理模塊的設計與實現 311
9.8.5 工具欄控制窗體消息處理模塊的實現 318
9.9 小結 318
第10章 區域網聊天工具(socket+tcp+自定義消息+圖像組合框) 319
教學視頻:33分鍾
10.1 區域網聊天工具簡介 319
10.1.1 視頻播放器功能簡介 319
10.1.2 視頻播放器技術簡介 320
10.2 控制項知識 321
10.2.1 點陣圖按鈕cbitmapbutton 321
10.2.2 ip編輯框 325
10.2.3 圖像列表控制項 328
10.2.4 圖像組合框 330
10.3 socket簡介 332
10.4 socket常用數據類型 332
10.4.1 socket類型數據 333
10.4.2 word類型數據 333
10.4.3 wsadata類型及lpwsadata類型 333
10.4.4 sockaddr_in及in_addr類型數據 334
10.4.5 sockaddr類型 334
10.5 socket常用函數 335
10.5.1 初始化socket環境 335
10.5.2 使用socket()函數實現創建套接字功能 335
10.5.3 使用setsockopt()函數實現設置socket的屬性功能 336
10.5.4 使用closesocket()函數實現關閉套接字功能 336
10.5.5 使用bind()函數實現地址綁定功能 336
10.5.6 使用listen()函數實現監聽埠功能 336
10.5.7 使用accept()函數實現接收連接功能 337
10.5.8 使用connect()函數實現連接伺服器功能 337
10.5.9 使用send()函數實現發送數據功能 338
10.5.10 使用rect()函數實現接收數據功能 338
10.6 csocket的封裝 339
10.7 伺服器端模塊的設計與實現 340
10.7.1 伺服器端模塊界面設計與實現 340
10.7.2 伺服器模塊的功能設計與實現 342
10.8 客戶端模塊的設計與實現 347
10.8.1 客戶端界面的設計與實現 348
10.8.2 客戶端功能的設計與實現 349
10.9 小結 353
第11章 截屏工具(動態鏈接庫+鍵盤鉤子+游標捕獲+類橡皮類crecttracker) 354
教學視頻:25分鍾
11.1 截屏工具簡介 354
11.1.1 主界面使用簡介 354
11.1.2 截圖模塊簡介 355
11.2 動態鏈接庫 356
11.2.1 dll技術簡介 356
11.2.2 vc++ 6.0開發dll實例 357
11.3 鉤子技術 359
11.3.1 鉤子技術簡介 359
11.3.2 鍵盤鉤子dll的實現 361
11.3.3 鍵盤鉤子dll的調用 363
11.4 crecttracker技術簡介 364
11.4.1 crecttracker類的常用數據變數 364
11.4.2 crecttracker類的常用成員函數 365
11.4.3 crecttracker類的應用實例 366
11.5 功能控制模塊的設計與實現 369
11.5.1 功能控制模塊的界面設計及實現 369
11.5.2 截屏模塊跳轉功能的實現 372
11.5.3 控制模塊最小化到托盤功能的實現 372
11.5.4 控制模塊在托盤中消息處理功能的實現 373
11.5.5 關閉截屏工具功能的實現 373
11.5.6 捕獲鍵盤鉤子消息功能的實現 374
11.6 截屏主功能模塊的設計與實現 375
11.6.1 信息提示框的設計與實現 375
11.6.2 截圖模塊主窗體的設計與實現 379
11.6.3 截圖功能的設計與實現 384
11.7 小結 389
第12章 掃雷游戲(定時器+gdi+數字時鍾) 390
教學視頻:41分鍾
12.1 掃雷游戲簡介 390
12.1.1 游戲界面簡介 390
12.1.2 游戲規則及方法簡介 391
12.2 游戲系統資源 392
12.2.1 菜單資源 392
12.2.2 點陣圖資源 392
12.2.3 聲音資源 394
12.3 游戲初始化及游戲界面繪制 394
12.3.1 初始化游戲變數 397
12.3.2 初始化游戲 400
12.3.3 繪制游戲界面 401
12.4 游戲功能控制及使用說明的實現 405
12.4.1 游戲菜單選項的功能實現 405
12.4.2 幫助菜單選項的功能實現 408
12.4.3 菜單選項的選中狀態控制函數 409
12.5 游戲與用戶的交互 411
12.5.1 滑鼠單擊事件的處理 411
12.5.2 滑鼠左鍵抬起事件的處理 412
12.5.3 滑鼠左右鍵同時按下事件的處理 415
12.5.4 滑鼠左右鍵同時按下後滑鼠抬起事件的處理 416
12.5.5 滑鼠右鍵按下事件的處理 417
12.5.6 滑鼠右鍵抬起事件的處理 418
12.6 游戲結果處理函數 419
12.7 掃雷英雄榜模塊的實現 421
12.7.1 注冊表簡介 421
12.7.2 vc++對注冊表的操作 421
12.7.3 注冊表在本實例中的應用 423
12.7.4 查詢英雄榜數據 425
12.7.5 英雄榜新紀錄的更新模塊 427
12.8 小結 428
第13章 串口調試器(串口編程+消息+多線程) 429
教學視頻:38分鍾
13.1 串口調試器簡介 429
13.1.1 串口調試器界面簡介 429
13.1.2 串口設置功能簡介 430
13.1.3 數據收發功能簡介 430
13.1.4 情景模式簡介 431
13.1.5 數據保存功能簡介 432
13.2 圖標工具欄 433
13.2.1 載入工具欄圖像資源 433
13.2.2 添加工具欄資源 434
13.2.3 創建工具欄實例 434
13.2.4 為工具欄添加圖像資源關聯 435
13.2.5 為工具欄添加提示信息 435
13.3 分組單選按鈕 437
13.3.1 創建單選按鈕測試工程 437
13.3.2 修改單選按鈕屬性 437
13.3.3 添加單選按鈕關聯變數 438
13.3.4 檢測單選按鈕效果 438
13.4 串口基礎知識 439
13.4.1 串口簡介 439
13.4.2 串口通信簡介 439
13.5 串口通信編程基礎 440
13.5.1 打開串口 441
13.5.2 配置串口 442
13.5.3 讀寫串口 445
13.5.4 關閉串口 448
13.6 自定義串口類 449
13.6.1 構造及析構函數的實現 450
13.6.2 串口打開函數的實現 451
13.6.3 processerrormessage()函數的實現 453
13.6.4 串口線程函數的實現 454
13.6.5 串口線程監控函數的實現 456
13.6.6 串口關閉函數的實現 457
13.6.7 讀取串口數據函數的實現 457
13.6.8 寫串口函數的實現 458
13.6.9 數據發送函數的實現 460
13.7 主窗體的界面設計 460
13.7.1 主界面布局設計 460
13.7.2 主界面菜單的設計 461
13.7.3 組合框顯示控制及初始化 462
13.7.4 單選按鈕的控制及初始化 462
13.7.5 復選框的控制及初始化 463
13.7.6 添加控制項關聯變數 463
13.8 配置窗體的設計與實現 463
13.8.1 配置窗體的界面設計 464
13.8.2 設置串口控制部分的組合框 464
13.8.3 控制項添加關聯變數 468
13.9 主窗體菜單及工具欄模塊的功能實現 469
13.9.1 串口開關控制功能的實現 469
13.9.2 串口的屬性設置 471
13.9.3 將接收到的數據保存到文件中 472
13.9.4 計數清零 473
13.10 接收數據模塊的功能實現 474
13.10.1 接收數據顯示控制模塊 474
13.10.2 接收數據處理模塊 476
13.11 發送數據模塊的功能實現 478
13.11.1 發送數據控制功能的實現 478
13.11.2 發送數據操作的控制功能 479
13.12 小結 482
第14章 列印工具(文檔視圖+設備環境上下文) 483
教學視頻:18分鍾
14.1 列印編程基礎知識 483
14.1.1 通用列印對話框 483
14.1.2 設備環境上下文 485
14.1.3 視圖列印 490
14.1.4 保存和維護列印作業 491
14.2 列印模塊設計及功能展示 493
14.2.1 列印工具模塊功能展示 493
14.2.2 列印工具程序的流程和原理 493
14.3 列印工具 495
14.3.1 創建列印模塊工程 496
14.3.2 創建各個功能類 496
14.3.3 控制列印對話框 497
14.3.4 創建列印視圖 501
14.3.5 創建列印預覽視圖 504
14.3.6 實現列印列表功能 505
14.4 小結 509
第15章 監控技術(進程+opencv) 510
教學視頻:26分鍾
15.1 監控技術背景相關知識 510
15.2 本地監控 510
15.2.1 windows常用系統性能計數器對象簡介 510
15.2.2 使用性能計數器對象 511
15.2.3 本地監控示例(cpu使用率) 512
15.2.4 本地監控示例——各進程cpu佔用率 514
15.3 遠程監控——遠程攝像頭實例 518
15.3.1 遠程監控實現原理與邏輯流程 518
15.3.2 遠程攝像頭——opencv安裝配置 518
15.3.3 封裝好的網路傳輸單元——類介紹 521
15.3.4 封裝好的網路傳輸單元——類使用(服務方) 522
15.3.5 封裝好的網路傳輸單元——類使用(客戶方) 523
15.3.6 遠程攝像頭——創建客戶方工程 524
15.3.7 遠程攝像頭——創建監控方工程 529
15.4 小結 531
第3篇 項目案例實戰
第16章 人事管理系統(odbc+sql server+多線程) 534
教學視頻:57分鍾
16.1 人事管理系統簡介 534
16.1.1 用戶登錄模塊簡介 534
16.1.2 主界面簡介 534
16.1.3 員工管理模塊簡介 535
16.1.4 保險管理模塊簡介 539
16.1.5 合同管理模塊簡介 539
16.1.6 部門管理模塊簡介 540
16.2 實現人事管理系統的關鍵技術 541
16.2.1 odbc簡介 541
16.2.2 創建odbc數據源 541
16.2.3 odbc在vc++中的應用 543
16.3 人事管理系統資料庫設計 547
16.3.1 需求分析 547
16.3.2 概要設計 548
16.3.3 資料庫設計 548
16.4 人事管理系統主界面的設計與實現 552
16.4.1 主界面的設計與實現 552
16.4.2 主界面的功能設計與實現 553
16.5 綜合信息管理模塊設計與實現 555
16.5.1 社保管理模塊的設計與實現 555
16.5.2 合同管理模塊的設計與實現 562
16.5.3 部門管理模塊的設計與實現 566
16.6 員工信息管理模塊設計與實現 566
16.6.1 員工管理主窗體的設計與實現 566
16.6.2 員工信息管理模塊的設計與實現 570
16.6.3 入職管理模塊的設計與實現 582
16.6.4 轉正管理模塊的設計與實現 584
16.6.5 離職管理模塊的設計與實現 587
16.6.6 借調管理及調動管理模塊的設計與實現 591
16.6.7 月末統計管理模塊的設計與實現 593
16.7 小結 597
第17章 電子相冊(雙緩繪圖+gdi+gdi+) 598
教學視頻:61分鍾
17.1 電子相冊簡介 598
17.1.1 相冊的管理模塊 598
17.1.2 新建相冊模塊 599
17.1.3 相冊瀏覽模塊 599
17.1.4 電子相冊的技術簡介 601
17.2 點陣圖按鈕 601
17.2.1 設置按鈕屬性 601
17.2.2 載入按鈕點陣圖資源 601
17.2.3 將點陣圖資源設置為按鈕的背景圖片 602
17.3 仿木質桌面的全屏對話框 602
17.3.1 設置對話框全屏顯示 602
17.3.2 為對話框設計並載入木質效果的背景圖資源 603
17.3.3 編碼實現圖像作為對話框的背景圖像 603
17.4 設計個性滑鼠游標 604
17.4.1 設計並載入游標資源 604
17.4.2 設置滑鼠左鍵按下時的游標 604
17.5 gdi+的基礎知識 605
17.6 vc++與gdi+開發環境的搭建 607
17.6.1 下載解壓gdi+開發包 607
17.6.2 設置include及lib目錄 607
17.6.3 添加相關的宏定義 607
17.6.4 添加相關的庫文件 608
17.6.5 測試gdi+搭建的環境 608
17.7 gdi+與gdi共同實現雙緩沖繪圖 610
17.7.1 重載窗體的onpaint()函數 610
17.7.2 無雙緩沖的效果 610
17.7.3 利用雙緩沖解決閃屏問題 611
17.8 利用gdi+實現翻頁效果 612
17.9 電子相冊的模塊分析 617
17.9.1 相冊管理模塊的設計與實現 617
17.9.2 新建相冊模塊的設計與實現 622
17.9.3 電子相冊瀏覽模塊的設計與實現 625
17.10 小結 640
第18章 超市管理系統(ado+sql+access) 641
教學視頻:60分鍾
18.1 超市管理系統簡介 641
18.1.1 用戶登錄模塊簡介 641
18.1.2 前台銷售模塊簡介 641
18.1.3 後台員工管理模塊簡介 642
18.1.4 後台倉庫管理模塊簡介 643
18.1.5 後台票據管理模塊簡介 643
18.1.6 後台貨物管理模塊簡介 643
18.1.7 後台營業統計管理模塊簡介 644
18.2 實現超市管理系統的關鍵技術 645
18.2.1 ado簡介 645
18.2.2 ado基礎 645
18.2.3 ado在vc++中的應用 646
18.2.4 ado的封裝類 649
18.3 超市管理系統資料庫設計 651
18.3.1 需求分析 652
18.3.2 概要設計 652
18.3.3 資料庫設計 653
18.4 超市管理系統前台銷售模塊設計與實現 655
18.4.1 登錄模塊的界面設計與實現 655
18.4.2 登錄模塊的功能設計與實現 656
18.4.3 銷售模塊的界面設計與實現 659
18.4.4 銷售模塊的功能設計與實現 662
18.5 超市管理系統後台管理模塊設計與實現 670
18.5.1 員工管理模塊的設計與實現 670
18.5.2 倉庫管理模塊的設計與實現 675
18.5.3 票據管理模塊的設計與實現 678
18.5.4 商品管理模塊的設計與實現 679
18.5.5 營業統計模塊的設計與實現 679
18.6 小結 681