首页 > 编程知识 正文

包含c语言课程设计教室管理系统的词条

时间:2023-12-29 13:16:33 阅读:329742 作者:XFDI

本文目录一览:

c语言课程设计--班级档案管理系统

//****************************************************************************

//**** 说明:密码所在的文件位于c盘,文件名为1.txt。

//**** 学生基本信息最好保存在C盘,文件名为student.txt。

//****************************************************************************

#include stdio.h

#include stdlib.h

#include string.h

#include conio.h

#define N 3

struct student

{

char name[10];

char no[10];

char sex;

int age;

char bnote[100];

};

void print(bool menu)//打印基本信息

{

if (!menu)

{

printf("学生基本信息录入 ,press 1n");

}

else

{

printf("学生基本信息显示 ,press 2n");

printf("学生基本信息保存 ,press 3n");

printf("学生基本信息删除 ,press 4n");

printf("学生基本信息修改 ,press 5n");

printf("学生基本信息查询 ,press 6n");

}

printf("退出学生信息系统 ,press 7n");

}

bool Check(char pas[6])//密码验证

{

FILE *fp;

char ch;

char a[7]={" "};

int i = 0;

if ((fp=fopen("c:\1.txt","r"))==NULL)

{

printf("打开文件失败!n");

exit(0);

}

ch=fgetc(fp);

while (ch!=EOFi6)

{

a[i] = ch;

ch=fgetc(fp);

i++;

}

a[6] = '';

if (!strcmp(pas,a))

{

return true;

}

else

{

printf("密码错误n");

return false;

}

fclose(fp);

}

void GetInfo(struct student *arr,int n)//学生基本信息录入

{

for (int i = 0;in;i++)

{

printf("输入学生的基本信息:name no sex age bnoten");

scanf("%s %s %c %d %s",arr[i].name,arr[i].no,arr[i].sex,arr[i].age,arr[i].bnote);

}

}

void Display(struct student* arr,int n)//学生基本信息显示

{

printf("学生信息: Name NO Sex age Noten");

for (int i = 0;in;i++)

{

printf("%15s%15s%15c%15d%15sn",arr[i].name,arr[i].no,arr[i].sex,arr[i].age,arr[i].bnote);

}

}

void Save(struct student* arr,int n)//学生基本信息保存,保存在c:\student.txt

{

FILE * fp;

fp= fopen("c:\student.txt","w+");

if (fp == NULL)

{

printf("文件不存在!n");

exit(0);

}

fwrite(arr,sizeof(struct student)*n,n,fp);

fclose(fp);

}

void Modfiy(struct student* arr,int n)//学生基本信息修改

{

char number[10];

bool flag=false;

char pass[6];

printf("请输入密码:n");

scanf("%s",pass);

if (Check(pass))

{

printf("修改学生信息:n");

printf("请输入学号:n");

scanf("%s",number);

for (int i =0;in;i++)

{

if (!strcmp(number,arr[i].no))

{

printf("infor: name no sex age noten");

printf("%12s%12s%12c%12d%12sn",arr[i].name,arr[i].no,

arr[i].sex,arr[i].age,arr[i].bnote);

printf("please input information:n");

scanf("%s%s%c%d%s",arr[i].name,arr[i].no,arr[i].sex,arr[i].age,arr[i].bnote);

Save(arr,n);

flag = true;

}

}

if (flag == false)

{

printf("该学生不存在!:n");

}

}

}

void Delete(struct student* arr,int n)//学生基本信息删除

{

char number[10];

bool flag=false;

printf("Delete information:n");

printf("please input the no:n");

scanf("%s",number);

for (int i =0;in;i++)

{

if (!strcmp(number,arr[i].no))

{

strcpy(arr[i].name," ");

strcpy(arr[i].no," ");

strcpy(arr[i].bnote," ");

arr[i].sex = ' ';

arr[i].age = 0;

Save(arr,n);

flag = true;

}

}

if (flag == true)

{

printf("该学生不存在!:n");

}

}

void Search(struct student* arr,int n)//学生基本信息查询

{

int temp,i;

bool flag=false;

printf("---------------通过学号查询,press 1-------------n");

printf("---------------通过姓名查询,press 2-----------n");

printf("---------------通过性别查询,press 3------------n");

printf("---------------通过年龄查询,press 4------------n");

printf("---------------退出,press 5 ------------n");

scanf("%d",temp);

switch (temp)

{

case 1://按照学号查询

{

char num[10];

printf("请输入学号:n");

scanf("%s",num);

for ( i =0;in;i++)

{

if (!strcmp(num,arr[i].no))

{

printf("%12s%12s%12c%12d%12sn",arr[i].name,arr[i].no,

arr[i].sex,arr[i].age,arr[i].bnote);

flag = true;

}

}

if (!flag)

{

printf("该学生不存在.n");

}

}

break;

case 2://按照名字查询

{

char num[10];

printf("please input name:n");

scanf("%s",num);

for ( i =0;in;i++)

{

if (!strcmp(num,arr[i].name))

{

printf("%12s%12s%12c%12d%12s",arr[i].name,arr[i].no,

arr[i].sex,arr[i].age,arr[i].bnote);

flag = true;

}

}

if (!flag)

{

printf("该学生不存在.n");

}

}

break;

case 3://按照性别查询

{

char ch;

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

//scanf("%c",ch);

ch = getch();

for ( i =0;in;i++)

{

if (ch == arr[i].sex)

{

printf("%12s%12s%12c%12d%12sn",arr[i].name,arr[i].no,

arr[i].sex,arr[i].age,arr[i].bnote);

flag = true;

}

}

if (!flag)

{

printf("t该学生不存在.n");

}

}

break;

case 4://按照年龄查询

{

char num_age;

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

scanf("%d",num_age);

for ( i =0;in;i++)

{

if (num_age == arr[i].age)

{

printf("%12s%12s%12c%12d%12sn",arr[i].name,arr[i].no,

arr[i].sex,arr[i].age,arr[i].bnote);

flag = true;

}

}

if (!flag)

{

printf("该学生不存在.n");

}

}

break;

default:

break;

}

}

void main()

{

struct student arr[N];

char ps[6];

bool flag =false;

printf("请输入密码:n");

scanf("%s",ps);

flag = Check(ps);

if (flag)

{

int select;

print(false);

scanf("%d",select);

while (0select select 7 )

{

switch (select)

{

case 1:

GetInfo(arr,N);

print(true);

break;

case 2:

Display(arr,N);

print(true);

break;

case 3:

Save(arr,N);

print(true);

break;

case 4:

Delete(arr,N);

print(true);

break;

case 5:

Modfiy(arr,N);

print(true);

break;

case 6:

Search(arr,N);

print(true);

break;

default:

break;

}

printf("请选择:n");

scanf("%d",select);

}

}

}

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登记学生资料ttttt2删除学生资料n");

printf("t3查询学生资料ttttt4修改学生资料n");

printf("t5保存学生资料ttttt0退出系统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%st%st%dt%dt%dt %dt %dn",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("tttt查找结果n");

printstart();

printc();

printe(p);

printstart();

}

else

Nofind();

}

else if(sel==2) /* 姓名 */

{

printf("请你输入要查找的姓名:");

scanf("%s",findmess);

p=Locate(l,findmess,"name");

if(p)

{

printf("tttt查找结果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("tttt显示结果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;

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("ttt==========帮助信息==========n");break;

default: Wrong();getchar();break;

}

}

}

/* */

C语言课程设计图书馆管理系统加讲解

#include stdio.h

#include stdlib.h

#include conio.h

struct BOOK

{

int id,usr[10],total,store,days[10];

char name[31],author[21];

}books[100];

/*上面是结构体的定义,用于存放书籍及借书的信息。*/

void page_title(char *menu_item)

{

clrscr();

printf(" 图 书 管 理 系 统 nn- %s -nn",menu_item);

}

/*上面是打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。*/

void return_confirm(void)

{

printf("n按任意键返回……n");

getch();

}

/*上面是返回前请求确认的函数,以便在返回前观察结果*/

int search_book(void)

{

int n,i;

printf("请输入图书序号:");

scanf("%d",i);

for(n=0;n100;n++)

{

if(books[n].id==i)

{

printf("书名:%sn",books[n].name);

printf("作者:%sn",books[n].author);

printf("存数:%d of ",books[n].store);

printf("%dn",books[n].total);

return n;

}

}

printf("n输入错误或无效图书序号.n");

return -1;

}

/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返

回数组下标,如果找不到相应记录则提示错误并返回-1。*/

void book_out(void)

{

int n,s,l,d;

page_title("借阅图书");

if((n=search_book())!=-1books[n].store0)

{

printf("请输入借书证序号:");

scanf("%d",s);

printf("请输入可借天数:");

scanf("%d",d);

for(l=0;l10;l++)

{

if(books[n].usr[l]==0)

{

books[n].usr[l]=s;

books[n].days[l]=d;

break;

}

}

books[n].store--;

}

if(n!=-1books[n].store==0) printf("此书已经全部借出.n");

return_confirm();

}

/*上面是借书的函数,首先调用找书函数*/

void book_in(void)

{

int n,s,l;

page_title("归还图书");

if((n=search_book())!=-1books[n].storebooks[n].total)

{

printf("借阅者图书证列表:n");

for(l=0;l10;l++)

if (books[n].usr[l]!=0)

printf("[%d] - %d天n",books[n].usr[l],books[n].days[l]);

printf("请输入借书证序号:");

scanf("%d",s);

for(l=0;l10;l++)

{

if(books[n].usr[l]==s)

{

books[n].usr[l]=0;

books[n].days[l]=0;

break;

}

}

books[n].store++;

}

if(n!=-1books[n].store==books[n].total)

printf("全部入藏.n");

return_confirm();

}

void book_add(void)

{

int n;

page_title("注册新书");

for(n=0;n100;n++)

if(books[n].id==0) break;

printf("序号:");

scanf("%d",books[n].id);

printf("书名:");

scanf("%s",books[n].name);

printf("作者:");

scanf("%s",books[n].author);

printf("数量:");

scanf("%d",books[n].total);

books[n].store=books[n].total;

return_confirm();

}

void book_del(void)

{

int n;

page_title("注销旧书");

if((n=search_book())!=-1) books[n].id=0;

printf("该书已注销.n");

return_confirm();

}

void main(void)

{

menu: page_title("操作选单");

printf("请用数字键选择操作nn");

printf("1 借阅图书n2 归还图书nn");

printf("3 注册新书n4 注销旧书nn");

printf("n0 退出n");

switch(getch())

{

case '1' : book_out();break;

case '2' : book_in();break;

case '3' : book_add();break;

case '4' : book_del();break;

case '0' : exit(0);

}

goto menu;

}

{

int n;

page_title("广?症慕");

if((n=search_book())!=-1) books[n].id=0;

printf("乎慕厮广?.n");

return_confirm();

}

void main(void)

{

menu: page_title("荷恬佥汽");

printf("萩喘方忖囚佥夲荷恬nn");

printf("1 処堋夕慕n2 拷珊夕慕nn");

printf("3 广过仟慕n4 广?症慕nn");

printf("n0 曜竃n");

switch(getch())

{

case '1' : book_out();break;

case '2' : book_in();break;

case '3' : book_add();break;

case '4' : book_del();break;

case '0' : exit(0);

}

goto menu;

}

自己看

求C语言课程设计(教务信息管理系统)

/*-------------1-------------*/

#includebios.h

#includedos.h /*头文件*/

#includeconio.h

#includectype.h

#includeprocess.h

#includestdlib.h

#includestdio.h

#includestring.h

#define NULL 0

#define ESC 0x001b /* 退出 */

#define F1 0x3b00 /* 查看帮助信息,调用HelpMassage()函数 */

#define F2 0x3c00 /*输入学生成绩*/

#define F3 0x3d00 /*按学号查找*/

#define F4 0x3e00 /*按姓名查找*/

#define F5 0x3f00 /*列出所有学生成绩*/

#define F6 0x4000 /*统计*/

struct stuType /*定义结构体变量*/

{

char NO[11]; /*学号长度为10*/

char XM[10];

char AGE[2]; /*年龄长度为2*/

float CJ[4]; /*包含4门成绩*/

};

/*-------------2-------------*/

int JY_NO(char *stu_num,FILE *fp) /*检验学号的正确性*/

{ struct stuType stud;

int NO;

char *p=stu_num;

if(strcmp(stu_num,"#")==0) return 1; /*若输入"#"返回真值,不再循环输入*/

while(*p!='') /*学号必须是数字,否则返回重新输入*/

{ NO=(int)*p;

if(NO48||NO57)

{ puts("ttUndefined SN!Please input again!n");/*非法学号!请重新输入!*/

return 0;

}

else p++; /*指针加1*/

}

if(strlen(stu_num)!=10) /*若学号长度不为10,则返回重新输入*/

{ puts("ttLength of SN Error!n");/*学号长度不对*/

return 0;

}

if(getchar()!='n') /*若学号后面的字符不是回车符,则学号长度大于10*/

{ printf("ttThe length of SN should more than 10!Please input again!n");/*学号长度大于10个,请重新输入*/

do{}while(getchar()!='n'); /*用getchar接收多余的字符*/

return 0;

}

else

{

rewind(fp); /*使文件指针指向头*/

while(!feof(fp)) /*若文件指针未到结尾,就继续执行下面的循环,feof遇到文件结束符返回非零值,否则返回0*/

{ fread(stud,sizeof(struct stuType),1,fp); /*读取一定长度的数据*/

if(strcmp(stu_num,stud.NO)==0) /*学号的唯一性*/

{ printf("tt Repeat SN,Please input again!n");/*学号重复!请重新输入*/

printf("ttThe Record of this student:n");/*该学生成绩如下*/

printf("ttChinese:%.1fn",stud.CJ[0]);/*语文*/

printf("ttMath:%.1fn",stud.CJ[1]);/*数学*/

printf("ttEnglish:%.1fn",stud.CJ[2]);/*英语*/

printf("ttTotal:%.1fn",stud.CJ[3]);/*总评*/

return 0;

}

}

}

return 1;

}

/*-------------3-------------*/

int JY_NO2(char *stu_num) /*检验学号*/

{ int NO;

char *p=stu_num;

if(strcmp(stu_num,"#")==0)return 1; /*若输入“#”,则返回真值结束*/

if(strlen(stu_num)!=10) /*学号长度不为10*/

{ puts("ttLength of SN Error!n");/*学号长度不对*/

return 0;

}

while(*p!='') /*学号必须用数字,若包含有字母,或其它字符则返回假值重新输入*/

{ NO=(int)*p;

if(NO48||NO57)

{ puts("ttUndefined SN!Please input again!n");/*非法学号!请重新输入*/

return 0;

}

else p++; /*指针加1*/

}

if(getchar()!='n') /*检验学号长度是否大于10,并把多余的字符去掉*/

{ printf("ttThe length of SN should more than 10!Please input again!n");/*学号长度大于10个,请重新输入*/

do{}while(getchar()!='n');

return 0;

}

return 1;

}

/*-------------4-------------*/

int JY_XM(char *stu_XM) /*检验姓名*/

{ int PD;

char *p;

p=stu_XM;

while(*p!='') /*姓名只能用英文*/

{

PD=(int)*p;

if(PD0)

{ puts("ttName should use English, Please input again!n");/*姓名只能用英文请重新输入*/

return 0;

}

else p++; /*使指针加1,指向下一汉字*/

}

if(getchar()!='n') /*姓名长度不得大于5个*/

{ printf("ttThe length of Name is more than 5, Please input again!n");/*姓名长度大于5个请重新输入*/

do{}while(getchar()!='n');

return 0;

}

return 1; /*字符串全为汉字返回真*/

}

/*-------------5-------------*/

int JY_AGE(float stu_AGE) /*年龄只能在0~100之间*/

{

if(stu_AGE0||stu_AGE100)

{ printf("ttInput Error! Record should between 0~100!n");/*输入错误,成绩只能在0~100之间*/

return 0;

}

return 1;

}

/*-------------6-------------*/

int JY_CJ(float stu_CJ) /*学生成绩只能在0~100之间*/

{

if(stu_CJ0||stu_CJ100)

{ printf("ttInput Error! Record should between 0~100!n");/*输入错误,成绩只能在0~100之间*/

return 0;

}

return 1;

}

/*-------------7-------------*/

void CreatFile() /*输入文件*/

{ FILE *fp;

struct stuType stu,stu0={"","",}; /*对stu0xianfuzhi*/

fp=fopen("stu.dat","wb+"); /*打开或创建一个二进制文件,打开时将原来的内容删除*/

if(fp==NULL)

{ printf("ttFile opens Error!ntttPress Anykey back...");/*文件打开失败,按任意键返回*/

getch();

return;

}

else

{ while(1)

{ stu=stu0;

do{ printf("nttPlease input SN:"); /*输入学号并检验其正确性*/

scanf("%10s",stu.NO);

}while(!JY_NO(stu.NO,fp));

if(strcmp(stu.NO,"#")==0)break;

do{ printf("nttPlease input Name:"); /*输入姓名并检验其正确性*/

scanf("%10s",stu.XM);

}while(!JY_XM(stu.XM));

do{ printf("nttPlease input age:"); /*输入年龄绩并检验其正确性*/

scanf("%f",stu.AGE);

}while(!JY_AGE(stu.AGE[0]));

do{ printf("nttPlease input record of Chinese:"); /*输入成绩并检验其正确性*/

scanf("%f",stu.CJ[0]);

}while(!JY_CJ(stu.CJ[0]));

do{ printf("nttPlease input record of Math:"); /*同上*/

scanf("%f",stu.CJ[1]);

}while(!JY_CJ(stu.CJ[1]));

do{ printf("nttPlease input record of English:");

scanf("%f",stu.CJ[2]);

}while(!JY_CJ(stu.CJ[2]));

do{ printf("nttPlease input record of Total:");

scanf("%f",stu.CJ[3]);

}while(!JY_CJ(stu.CJ[3]));

fwrite(stu,sizeof(struct stuType),1,fp); /*写文件*/

}

}

fclose(fp); /*关闭文件*/

}

/*-------------8-------------*/

void Search_Xuehao() /*按学号查询*/

{ FILE *fp;

int flag;

struct stuType stu,stud;

fp=fopen("stu.dat","rb");

if(fp==NULL) /*若文件打不开则输出下面的信息*/

{ printf("ttFile opens Error!ntttPress Anykey back...");

getch();

return;

}

else

{ do{ puts("nttPress"#" or search");

do{ printf("ttPlease input the SN what you want:");

scanf("%10s",stu.NO);

}while(!JY_NO2(stu.NO));

if(strcmp(stu.NO,"#")==0)break; /*若输入“#”则结束循环*/

flag=0;

rewind(fp);

while(fread(stud,sizeof(struct stuType),1,fp)) /*检查文件指针结束*/

{ if(strcmp(stu.NO,stud.NO)==0) /*比较学号*/

{ puts("ttThe Record of this student:");

printf("ttSN:%sn",stud.NO);

printf("ttName:%sn",stud.XM);

printf("ttAGE:%.1fn",stud.AGE[0]);

printf("ttChinese:%.1fn",stud.CJ[0]);

printf("ttMath:%.1fn",stud.CJ[1]);

printf("ttEnglish:%.1fn",stud.CJ[2]);

printf("ttTotal:%.1fn",stud.CJ[3]);

flag=1; /*记录学号是否查到*/

}

}

if(flag==0)puts("ttUndefined SN");

}while(strcmp(stu.NO,"#")!=0);

}

fclose(fp); /*关闭文件*/

}

/*-------------9-------------*/

void Search_Xingming() /*按姓名查找*/

{ FILE *fp;

int flag=0;

struct stuType stu,stud;

fp=fopen("stu.dat","rb");

if(fp==NULL)

{ printf("ttFile opens Error!nttPress Anykey back...");

getch();

return;

}

else

{ do{

do{ printf("ttPlease input the Name of the Student what you want:");

scanf("%10s",stu.XM);

}while(!JY_XM(stu.XM));

rewind(fp); /*文件指针指向头*/

while(fread(stud,sizeof(struct stuType),1,fp))

{ if(strcmp(stu.XM,stud.XM)==0) /*比较姓名是否相同*/

{ puts("ttThe name of the Student is:");

printf("ttSN:%sn",stud.NO);

printf("ttName:%sn",stud.XM);

printf("ttAGE:%.1fn",stud.AGE[0]);

printf("ttChinese:%.1fn",stud.CJ[0]);

printf("ttMath:%.1fn",stud.CJ[1]);

printf("ttEnglish:%.1fn",stud.CJ[2]);

printf("ttTotal:%.1fn",stud.CJ[3]);

flag=1; /*记录姓名是否被查到*/

}

}

if(flag==0)puts("nttUndefined Name!");

puts("ttContinue?(y--yes,Else key back)?");

}while(getch()=='y');

}

fclose(fp);

/* puts("ttPress Anykey to continue...");*/

/* getch();*/

}

/*-------------10-------------*/

int ListFile(void) /*输出文件,列出所有学生成绩*/

{ FILE *fp;

int REC=0; /*记录学生人数*/

struct stuType stu;

fp=fopen("stu.dat","rb");

if(fp==NULL)

{ printf("ttFile opens Error!nttPress Anykey back...");

getch();

return 1;

}

else{ printf("ttRecords of the Students:n");

printf("ttSNttNametChinesetMathtEnglishtTotaln");

rewind(fp);

while(fread(stu,sizeof(struct stuType),1,fp))

{ /*每读取一个长度的数据就输出*/

printf("tt%s",stu.NO);

printf("t%s",stu.XM);

printf("t%.1f",stu.AGE);

printf("t%.1f",stu.CJ[0]);

printf("t%.1f",stu.CJ[1]);

printf("t%.1f",stu.CJ[2]);

printf("t%.1f",stu.CJ[3]);

printf("n");

REC++;

if(REC%20==0) /*20个学生成绩,停一下*/

{ printf("ttPress Anykey to continue...n");

getch();

}

}

}

fclose(fp); /*关闭文件*/

printf("ttContinue...");

getch();

}

/*-------------11-------------*/

void Statistics() /*统计及格和优秀人数*/

{ FILE *fp;

int REC=0,unpass[4]={0},good[4]={0}; /*REC--记录个数,即人数,unpass--重修人数,good--优秀人数*/

float highest[4]={0},score[4]={0}; /*highest--最高分,score--总分*/

struct stuType stu;

fp=fopen("stu.dat","rb");

if(fp==NULL)

{ printf("ttFile opens Error!nttPress Anykey back...");

getch();

return;

}

else { rewind(fp);

while(fread(stu,sizeof(struct stuType),1,fp))

{ REC++;

score[0]=score[0]+stu.CJ[0]; /*语文*/

if(stu.CJ[0]=60)unpass[0]++;

if(stu.CJ[0]=80)good[0]++;

if(highest[0]stu.CJ[0])highest[0]=stu.CJ[0];

score[1]=score[1]+stu.CJ[1]; /*数学*/

if(stu.CJ[1]=60)unpass[1]++;

if(stu.CJ[1]=80)good[1]++;

if(highest[1]stu.CJ[1])highest[1]=stu.CJ[1];

score[2]=score[2]+stu.CJ[2]; /*英语*/

if(stu.CJ[2]=60)unpass[2]++;

if(stu.CJ[2]=80)good[2]++;

if(highest[2]stu.CJ[2])highest[2]=stu.CJ[2];

score[3]=score[3]+stu.CJ[3]; /*总评*/

if(stu.CJ[3]=60)unpass[3]++;

if(stu.CJ[3]=80)good[3]++;

if(highest[3]stu.CJ[3])highest[3]=stu.CJ[3];

}

if(REC==0) /*可以防止记录为0是REC作除数而造成的错误*/

{ printf("ttYou did't input the Name!Press Anykey back...");

getch();

return;

}

else{

printf("t Chineset Matht EnglishtTotaln"); /*输出统计信息*/

printf("tAverage: %.1ft %.1ft %.1ftt%.1fn",score[0]/REC,score[1]/REC,score[2]/REC,score[3]/REC);

printf("tTop record: %.1ft %.1ft %.1ftt%.1fn",highest[0],highest[1],highest[2],highest[3]);

printf("tNumber of good students: %dtt %dt %dtt %dn",good[0],good[1],good[2],good[3]);

printf("tNumber of unpassed students:%dtt %dt %dtt %dn",unpass[0],unpass[1],unpass[2],unpass[3]);

}

}

fclose(fp);

printf("ntttPress Anykey to continue...");

getch();

}

/*-------------12-------------*/

void HelpMessage()

{ clrscr();

printf("nnnnn chi xi tong shi lao shi suo bu zhi zuoye bianzhi ercheng,gai xitong juyou cunchu xuesheng shuju,an xuehao,xingming chaxun,liechu xuesheng chengji he tongjigongneng.n n shiyongfangfa:xitong shulu shuju hou,jiangzai dangqian muluzhong jianli yige mingwei stu.dat wenjian,yongyubaocun shulu de shuju.xuehao shulu zhineng yong shuzi shulu qie xuehao zhineng shi10wei.xingming shulu fuhe zhongguoren de xingming,zhineng yong zhongwen pinying,qie zuichangwei5 ge hanzhi.n chi chenxu zai Turbo C2.0xia yunxing tongguo nn ");

getch();

}

/*-------------13-------------*/

int GetKey(void) /*此函数返回一个按键的数值*/

{ int key;

key=bioskey(0); /*bioskey为调用BIOS键盘接口*/

if(key8) /*位移*/

{

key=key0x00ff;

}

return key; /*返回按键*/

}

/*-------------14-------------*/

void main()

{ int key;

struct date d; /*定义时间结构体*/

getdate(d); /*读取系统日期并把它放到结构体d中*/

clrscr(); /*清除屏幕*/

printf("nnnnn");

printf("t ========================================================n"); /*版本信息*/

printf("n");

printf("tt The System of Students Records Management 1.0 n");

printf("n");

printf("n");

printf("tt Builder: XG042-WZM YS HYF WQ n");

printf("tt Teacher:Song Zheyuann");

printf("tt Time:2005\7\5 n");

printf("n");

printf("t ========================================================n");

printf("tttPress Anykey to continue...");

/*while(!kbhit());*/

getch(); /*从键盘读取一个字符,但不显示于屏幕*/

system("cls"); /*调用DOS的清屏函数,TC中可用clrscr代替*/

while(1) /*主菜单*/

{

printf("nnnnn");

printf("t **************************************************n");

printf("t **t **n");

printf("t **tF1 --Help **n");

printf("t **t **n");

printf("t **tF2 --Data Input Save **n");

printf("t **t **n");

printf("t **tF3 --Search by SN **n");

printf("t **t **n");

printf("t **tF4 --Search by Name **n");

printf("t **t **n");

printf("t **tF5 --Contents Input **n");

printf("t **t **n");

printf("t **tF6 --Count Students Number(PassedGood) **n");

printf("t **t **n");

printf("t **tESC--Quit the System **n");

printf("t **t **n");

printf("t **************************************************n");

printf("nt Please select...tt%d\%d\%dnn",d.da_year,d.da_mon,d.da_day); /*提示信息,并显示当前系统日期*/

key=GetKey(); /*调用自定义函数,读取一个键*/

switch(key)

{

case F1: HelpMessage(); break;

case F2: CreatFile(); break;

case F3: Search_Xuehao(); break;

case F4: Search_Xingming();break;

case F5: ListFile(); break;

case F6: Statistics(); break;

case ESC:exit(1); break;

/*default: puts("tttWrong SN input!");

printf("tttPress Anykey back...");

getch();*/

}

clrscr(); /*每执行完一项功能后,自动清屏*/

}

}

课程设计 C语言学籍管理系统!!!

给你看个我写的班费管理系统,跟你这个比较类似,你改下就好了

#includeiostream

#includestring

#includevector

#include fstream

#includesstream

using namespace std;

class student

{

public:

student(string ,string ,string ,string );

string getSex(){return _sex;};

string getName(){return _name;};

string getID(){return _id;};

string getmoney(){return _money;};

void setMoney(string a){_money=a;};

void deleted(){_id="deleted";_name="deleted";_sex="deleted";_money="deleted";};

void setName(string);

void save();

void print();

private:

string _id;

string _name;

string _sex;

string _money;

string _total;

};

student::student(string id, string name, string sex,string money)

{

_id=id;_name=name;_sex=sex;

_money=money;

}

void student::save()

{

ofstream outf;

outf.open("myfile.txt",ios::app);

outf_id

"t" _name

"t"_sex

"t"_moneyendl;

outf.close();

}

void student::print()

{

cout_id

"tt" _name

"tt"_sex

"tt"_moneyendl;

}

void printMenu(void)

{

cout"-------------class fee management system--------------"endl;

cout"| |"endl;

cout"| author:XY |"endl;

cout"| |"endl;

cout"|----------------------------------------------------|"endl;

cout"| |"endl;

cout"| 1.Increase the student records |"endl;

cout"| 2.Delete student records |"endl;

cout"| 3.The total of class fee |"endl;

cout"| 4.search the class fee |"endl;

cout"| 5.view all class fee |"endl;

cout"| 6.add one class fee |"endl;

cout"| 0.exit |"endl;

cout"| |"endl;

cout"------------------------------------------------------"endl;

cout"make your choice:"endl;

}

void addstudent();//添加学生信息

void delstudent();//删除学生信息

void selstudent();//查询学生信息

void selall();//查询所有信息

void total();//班费总额

void addmoney();//增加某个学生的班费(实为更新操作)

bool isinfile=false;//判断是否读取过txt

vectorstudent stu;//全局对象student

int main()

{

int order=0;

printMenu();

cinorder;

while(order!=0)

{

switch(order)

{

case 1:addstudent();printMenu();cinorder;break;

case 2:delstudent();printMenu();cinorder;break;

case 3:total();printMenu();cinorder;break;

case 4:selstudent();printMenu();cinorder;break;

case 5:selall();printMenu();cinorder;break;

case 6:addmoney();printMenu();cinorder;break;

default:break;

}

}

coutendl;

cout"------------------------------------------------------"endl;

cout"thank you for using the system~"endl;

cout"------------------------------------------------------"endl;

}

void infile()//读取txt

{

if (isinfile==false)

{

stu.clear();

string tmp_id,tmp_name,tmp_sex,tmp_money;

int time =0;

string lines,field;

ifstream infile("myfile.txt");

while (getline (infile, lines))

{

istringstream stream(lines);

while(streamfield)

{

switch(time)

{

case 0:tmp_id = field;time=1;break;

case 1:tmp_name = field;time=2;break;

case 2:tmp_sex = field;time=3;break;

case 3:tmp_money = field;time=0;

stu.push_back(student(tmp_id,tmp_name,tmp_sex,tmp_money));break;

}

}

}

isinfile==true;

infile.close();

}

}

void addstudent()

{

string tmp_id;

string tmp_name;

string tmp_sex;

string tmp_money;

cout"Insert--ID:";

cintmp_id;

cout"Insert--Name:";

cintmp_name;

cout"Insert--Sex:";

cintmp_sex;

cout"Insert--Money:";

cintmp_money;

student(tmp_id,tmp_name,tmp_sex,tmp_money).save();

cout"save success!"endl;

isinfile=false;

}

void selall()

{

infile();

if (stu.size()==0)

{

cout"ERR:----No data in the system!"endl;

}

else

{

vectorstudent::iterator iter=stu.begin();

vectorstudent::iterator iter_end=stu.end();

coutendl;

cout"------------------------------------------------------"endl;

cout"id name sex money"endl;

for(;iter!=iter_end;iter++)

{

(*iter).print();

}

cout"------------------------------------------------------"endl;

}

coutendl;

}

void delstudent()

{

infile();

string search_name;

string search_id;

cout"delete----id:"endl;

cinsearch_id;

cout"delete----name:"endl;

cinsearch_name;

bool isFind=false;

if (stu.size()==0)

{

cout"ERR:----No data in the system!"endl;

}

else

{

vectorstudent::iterator iter=stu.begin();

vectorstudent::iterator iter_end=stu.end();

for(;iter!=iter_end;iter++)

{

if( (*iter).getName()==search_name(*iter).getID()==search_id)

{

isFind=true;

stu.erase(iter);

}

}

//重新将删除后的集合写入txt

vectorstudent::iterator iter1=stu.begin();

vectorstudent::iterator iter1_end=stu.end();

ofstream outf;

outf.open("myfile.txt");

for(;iter1!=iter1_end;iter1++)

{

outf(*iter1).getID()

"t"(*iter1).getName()

"t"(*iter1).getSex()

"t"(*iter1).getmoney()endl;

}

outf.close();

cout"delete success!"endl;

}

if(!isFind)

{

cout"Can't find this student!"endl;

}

coutendl;

}

void total()

{

infile();

if (stu.size()==0)

{

cout"ERR:----No data in the system!"endl;

}

else

{

vectorstudent::iterator iter=stu.begin();

vectorstudent::iterator iter_end=stu.end();

cout"------------------------------------------------------"endl;

cout"id name sex money"endl;

for(;iter!=iter_end;iter++)

{

(*iter).print();

}

cout"------------------------------------------------------"endl;

}

coutendl;

}

void selstudent()

{

infile();

string search;

cout"search----id or name:"endl;

cinsearch;

bool isFind=false;

if (stu.size()==0)

{

cout"ERR:----No data in the system!"endl;

}

else

{

vectorstudent::iterator iter=stu.begin();

vectorstudent::iterator iter_end=stu.end();

cout"------------------------------------------------------"endl;

cout"id name sex money"endl;

for(;iter!=iter_end;iter++)

{

if( (*iter).getName()==search||(*iter).getID()==search)

{

isFind=true;

(*iter).print();

}

}

cout"------------------------------------------------------"endl;

}

if(!isFind)

{

cout"Can't find this student!"endl;

}

coutendl;

}

void addmoney()

{

infile();

string search;

string update;

cout"search----id or name:"endl;

cinsearch;

bool isFind=false;

if (stu.size()==0)

{

cout"ERR:----No data in the system!"endl;

}

else

{

vectorstudent::iterator iter=stu.begin();

vectorstudent::iterator iter_end=stu.end();

cout"id name sex money"endl;

for(;iter!=iter_end;iter++)

{

if( (*iter).getName()==search||(*iter).getID()==search)

{

(*iter).print();

isFind=true;

cout"update----new class fee:"endl;

cinupdate;

(*iter).setMoney(update);

}

}

//重新将修改后的集合写入txt

vectorstudent::iterator iter1=stu.begin();

vectorstudent::iterator iter1_end=stu.end();

ofstream outf;

outf.open("myfile.txt");

for(;iter1!=iter1_end;iter1++)

{

outf(*iter1).getID()

"t"(*iter1).getName()

"t"(*iter1).getSex()

"t"(*iter1).getmoney()endl;

}

outf.close();

cout"update success!"endl;

}

if(!isFind)

{

cout"Can't find this student!"endl;

}

coutendl;

}

c语言课程设计 图书管理系统

高级语言程序设计(2)课程设计

   

一 程序设计说明书

【设计题目】 图书馆借阅管理

【问题描述】图书馆,适合用C++面向对象的功能来描述。图书馆管理系统分为借书、还书、图书管理和读者服务等四个部分。设计一个读者类Reader,记录每个读者基本信息;读者库类Rdatabase,记录所有读者信息;图书类Book, 记录每本书的基本信息;图书库类Bdatabase, 记录所有图书信息。

【基本要求】

1读者库类RDatabase中,其构造函数中,将read.txt文件中所有读入读者记录rede[]中。处理完毕,在析构函数中将read[]中的所有未删记录写入到read.txt中。

2图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。处理完毕,在析构函数中将book[]中的所有未删记录写入到book.txt中。

3 利用构造函数完成读者和图书数据初始化,完成内存分配。程序结束前,析构函数完成所申请的堆内存空间。

4 编写主函数,对所编写的矩阵类进行全面测试。要求用户界面采用菜单方式。测试中需要读者和图书数据通过I/O流从磁盘文件读入,同时显示在屏幕上。得到的数据通过I/O流写入磁盘文件保存,同时显示在屏幕上。

5 源程序中要有充分的注释,报告中要有详细的流程图和文字材料。

【类的设计】

该程序包含了四个类,如下:

1.Reader类,有读者的基本管理功能,具有以下私有数据:

int tag;//删除标记 1:已删;0:未删

int no;//读者编号

char name[10];//读者姓名

int borbook[Maxbor];//所借图书

2.读者库类Rdatabase, 具有以下私有数据:

int top;//读者记录指针

Reader read[Maxr];//读者记录

3.图书库类Book,有一本图书的基本功能,有以下私有数据:

int tag;//删除标记 1:已删;0:未删

int no;//图书编号

char name[20];//书名

int onshelf;//是否在架 1在架 0已借

4.图书库类BDatabase,有以下私有数据:

int top;//图书记录指针

Book book[Maxb];//图书记录

【特殊函数的设计说明】

构造函数

1.Reader类中构造函数Reader(),初始化函数;

2.读者库类RDatabase中,其构造函数Rdatabase(),将read.txt文件中所有读入读者记录rede[]中。

3.Book类中构造函数Book(),初始化函数;

4.图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。

 

拷贝构造函数

Reader类中的拷贝构造函数将getname()的返回值读者姓名拷贝到setname()中,Book类中的拷贝构造函数将getname()函数的返回值图书名拷贝到图书名设置函数setname()中。

 

析构函数

1.读者库类RDatabase中,其析构函数~Rdatabase(),将read[]中的所有未删记录写入到read.txt中;

2.图书库类BDatabase中,其析构函数~Bdatabase(),将book[]中的所有未删记录写入到book.txt中。

 

运算符重载

重载了“=”,当比较读者编号和图书编号时,重载;重载位运算符“〈〈”和“〉〉”等。

 

【主要函数算法流程图】

 

【程序的使用方法】

1.进入操作页面,按提示操作;

2.首先,新增图书和读者信息,之后就可以对以存在的信息进行操作;

3.操作当中,可以随时增加,更改和删除图书或读者信息;

4.当选择退出时,进行清屏。

 

二 程序上机调试报告

【语法错误及其排除】

1.在敲程序时,有很多拼写错误,例好多处把Readdata()误打Readdate();结束的分号,在不同的输入法状态下输入,这些小错误刚开始很难发现,不过有了经验,就很容易了。

2.创建新的构造函数时,使用出现了错误。重载构造函数要注意函数的访问权限,结果就不会出现错误。

【算法错误及其排除】

1.读者类中借书操作函数中,采用循环语句时判断读者已借图书量时for(int i=0;iMaxbor;i++)误写为for(int i=1;iMaxbor;i++),使循环发生错误。

2.指针使用错误,指针b和r混淆,导致编译错误得到“error C2660: 'retbook' : function does not take 1 parameters”错误报告。

三 程序测试结果

【收获及体会】

除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计这段时间,时刻都感觉自己有好多不懂,要学的太多了!经过这次课程设计,让我对C++这门语言有了更深的认识,操作能力有了提高。要想得到敲的代码运行出来后的满足感,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才达到所要的运行结果。学习编程,需要多揣摩,实践,实践,再实践,编程技能才能更上一层楼,此外还得多向高手请教!

【源程序代码】

//********************

//图书馆借阅管理

//班级:

//学号:

//姓名:

//********************

#includeiostream.h

#includeiomanip.h

#includestring.h

#includefstream.h

const int Maxr=1000;//最多的读者

const int Maxb=10000;//最多的图书

const int Maxbor=8;//每位读者最多借8本书

class Reader //读者类

{

int tag;//删除标记 1已删;0未删

int no;//读者编号

char name[10];//读者姓名

int borbook[Maxbor];//所借图书

public :

Reader(){}//构造函数

char *getname(){return name;}//获取读者姓名

int gettag(){return tag;}//获取删除标记

int getno(){return no;}//获取读者编号

void setname(char na[])//设置读者姓名

{

strcpy(name,na);

}

void delbook(){tag=1;}//设置删除标记

void addreader(int n,char *na)//增加读者

{

tag=0;

no=n;

strcpy(name,na);

for(int i=0;iMaxbor;i++)

borbook[i]=0;

}

void borrowbook(int bookid)//借书操作

{

for(int i=0;iMaxbor;i++)

{

if(borbook[i]==0)

{

borbook[i]=bookid;

}

}

}

int retbook(int bookid)//还书操作

{

for(int i=0;iMaxbor;i++)

{

if (borbook[i]==bookid)

{

borbook[i]=0;

return 1;

}

}

return 0;

}

void disp()//输出读者信息

{

coutsetw(5)nosetw(10)name"借书编号:";

for(int i=0;i,Maxbor;i++)

if(borbook[i]!=0)

coutborbook[i]endl;

}

};

 

class RDatabase//读者库类

{

int top;//读者记录指针

Reader read[Maxr];//读者记录

public:

RDatabase()//构造函数,将reader.txt读到read[]中

{

Reader s;

top=-1;

fstream file("reader.txt",ios::in);

while(1)

{

file.read((char*)s,sizeof(s));

if(!file)break;

top++;

read[top]=s;

}

file.close();

}

void clear()//删除所有读者信息

{

top=-1;

}

int addreader(int n,char *na)//添加读者,检查是否已存在

{

Reader *p=query(n);

if(p==NULL)

{

top++;

read[top].addreader(n,na);

return 1;

}

return 0;

}

Reader*query(int readerid)//按编号查找

{

for(int i=0;i=top;i++)

if(read[i].getno()==readeridread[i].gettag==0)

return read[i];

return NULL;

}

void disp()//删除读者所有信息

{

for(int i=0;i=top;i++)

read[i].disp();

}

void readerdata();//读者库维护

~RDatabase()//析构函数,将read[]写入reader.txt文件中

{

fstream file("reader.txt",ios::out);

for(int i=0;i=top;i++)

if(read[i].gettag()==0)

file.write((char*)read[i],sizeof(read[i]));

file.close();

}

};

void RDatabase::readerdata()

{

int choice=1;

char rname[20];

int readerid;

Reader*r;

while(choice!=0)

{

cout"读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出"endl;

cinchoice;

switch(choice)

{

case 1:

cout"请输入读者编号:";

cinreaderid;

cout"读入读者姓名:";

cinrname;

addreader(readerid,rname);

break;

case 2:

cout"请输入读者编号:";

cinreaderid;

r=query(readerid);

if(r==NULL)

{

cout"读者不存在"endl;

break;

}

cout"请输入新读者姓名:";

cinrname;

r-setname(rname);

break;

case 3:

cout"请输入读者编号:";

cinreaderid;

r=query(readerid);

if(r==NULL)

{

cout"读者不存在"endl;

break;

}

r-delbook();

break;

case 4:

cout"请输入读者编号:";

cinreaderid;

r=query(readerid);

if(r==NULL)

{

cout"该读者编号不存在"endl;

break;

}

case 5:

disp();

break;

case 6:

clear();

break;

}

}

}

 

class Book//图书类

{

int tag;//删除标记 1:已删;0:未删

int no;//图书编号

char name[20];//书名

int onshelf;//是否在架 1在架 0已借

public:

Book(){}

char*getname(){return name;}//获取读者姓名

int getno(){return no;}//获取图书编号

int gettag(){return tag;}//获取删除标记

void setname(char na[])//设置书名

{

strcpy(name,na);

}

void delbook(){tag=1;}//删除图书

void addbook(int n,char*na)//增加图书

{

tag=0;

no=n;

strcpy(name,na);

onshelf=1;

}

int borrowbook()//借书操作

{

if(onshelf==1)

{

onshelf=0;

return 1;

}

return 0;

}

void retbook()//还书操作

{

onshelf=1;

}

void disp()//输出图书

{

coutsetw(6)nosetw(18)namesetw(10)(onshelf==1?"在架":"已借")endl;

}

};

 

class BDatabase//图书库类

{

int top;//图书记录指针

Book book[Maxb];//图书记录

public:

BDatabase()//构造函数,将book.txt读到book[]中

{

Book b;

top=-1;

fstream file("book.txt",ios::in);

while(1)

{

file.read((char*)b,sizeof(b));

if(!file)break;

top++;

book[top]=b;

}

file.close();

}

void clear()//全删

{

top=-1;

}

int addbook(int n,char*na)//增加图书

{

Book*p=query(n);

if(p==NULL)

{

top++;

book[top].addbook(n,na);

return 1;

}

cout"新增成功!"endl;

}

Book*query(int bookid)//查找图书

{

for(int i=0;i=top;i++)

if(book[i].getno()==bookidbook[i].gettag()==0)

return NULL;

}

void bookdata();//图书库维护

void disp()

{

for(int i=0;i=top;i++)

if(book[i].gettag()==0)

book[i].disp();

}

~BDatabase()//析构函数,将book[]写入book.txt文件中

{

fstream file("book.txt",ios::out);

for (int i=0;i=top;i++)

if(book[i].gettag()==0)

file.write((char*)book[i],sizeof(book[i]));

file.close();

}

};

void BDatabase::bookdata()

{

int choice;

char bname[40];

int bookid;

Book *b;

while(choice!=0)

{

cout"图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出"endl;

cinchoice;

switch(choice)

{

case 1:

cout"输入图书编号:";

cinbookid;

cout"输入图书书名:";

cinbname;

addbook(bookid,bname);

break;

case 2:

cout"输入图书编号:";

cinbookid;

b=query(bookid);

if(b==NULL)

{

cout"该图书不存在"endl;

break;

}

cout"输入新书名:";

cinbname;

b-setname(bname);

cout"更名成功!"endl;

break;

case 3:

cout"输入图书编号:";

cinbookid;

b=query(bookid);

if(b==NULL)

{

cout"该图书不存在!"endl;

break;

}

b-delbook();

break;

case 4:

cout"请输入图书编号:";

cinbookid;

b=query(bookid);

if(b==NULL)

{

cout"该书不存在!"endl;

break;

}

b-disp();

break;

case 5:

disp();

break;

case 6:

clear();

break;

}

}

}

 

void main()

{

int choice=1,bookid,readerid;

RDatabase ReaderDB;

Reader *r;

BDatabase BookDB;

Book *b;

while(choice!=0)

{

cout" 1借书      "endl;

cout" 2还书      "endl;

cout" 3图书维护  "endl;

cout" 4读者维护  "endl;

cout" 0离开      "endl;

cinchoice;

switch(choice)

{

case 1:

cout"借书,请输入读者编号:";

cinreaderid;

cout"图书编号:";

cinbookid;

r=ReaderDB.query(readerid);

if(r==NULL)

{

cout"哈哈,借书成功!";

break;

}

b=BookDB.query(bookid);

if(b==NULL)

{

cout"不存在该书!"endl;

break;

}

if(b-borrowbook()==0)

{

cout"该书已借"endl;

break;

}

r-borrowbook(b-getno());

break;

cout"借书成功!"endl;

case 2:

cout"还书,请输入读者编号:";

cinreaderid;

cout"请输入图书编号;";

cinbookid;

r=ReaderDB.query(readerid);

if(r==NULL)

{

cout"不存在该读者!"endl;

break;

}

b-retbook();

r-retbook(b-getno());

break;

cout"还书成功!"endl;

case 3:

BookDB.bookdata();

break;

case 4:

ReaderDB.readerdata();

break;

}

}

}

【输出结果】

1借书

2还书

3图书管理

4读者服务

0退出

3

图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

1

输入图书编号:1111

输入图书书名:武林外传

新增成功!

图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

1

输入图书编号:2222

输入图书书名:今夜无眠

新增成功!

图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

1借书

2还书

3图书管理

4读者服务

0退出

4

读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出

1

请输入读者编号:001

读入读者姓名:周强

读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出

1借书

2还书

3图书管理

4读者服务

0退出

1

借书,请输入读者编号:001

图书编号:1111

哈哈,借书成功! 1借书

2还书

3图书管理

4读者服务

0退出

2

还书,请输入读者编号:001

请输入图书编号;1111

还书成功!

1借书

2还书

3图书管理

4读者服务

0退出

3

图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

2

输入图书编号:2222

输入新书名:金庸全集

更名成功!

Press any key to continue

这样可以么?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。