c语言课程设计

我要一个完整的课程设计,三选一即可,等我那号分转过来,再加200,内容如下:
1、学生成绩管理(结构体数组、函数、指针、算法、流程结构及文件等的综合应用)
程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:
(1)主菜单
学生成绩管理系统
1、 成绩录入
2、 成绩查询
3、 成绩统计
4、 退 出
(2)各菜单项功能
① 成绩录入:输入学生的学号、姓名及三门课的成绩;
② 成绩查询:(至少一种查询方式)。
 按学号查询学生记录。
 查询不及格学生的记录。
③成绩统计:
 计算学生的平均分;
 根据学生的平均分高低,对学生的数据进行排序后输出;
 对学生单科成绩排序,输出学生姓名与该科成绩;
④退出系统:退出整个系统(即主菜单)。
(3)结构体数组:
#define N 30struct student
{int num; /* 定义学号*/
char name[20]; /* 定义姓名*/
float score[3]; /* 定义存贮三门课成绩的数组*/
float average; /* 定义平均成绩*/
};struct student stu[N]; /* 定义结构体数组,存贮多个学生的记录*/
2简单的图书管理
3宿舍管理

学生成绩的太多了,帮你找了一个图书管理的,希望能帮上忙,代码如下:

#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define LEN sizeof(struct booklist)
#define LEN2 sizeof(struct memberlist)
#define LEN3 sizeof(struct readers)
typedef struct readers//借书信息结构体
{
char name[30];//借书人的姓名
struct readers *next2;
}reader;

//书本信息结构体
typedef struct booklist
{
char num[20]; //书号
char name[30]; //书名
char concern[50];//出版社
char date[20];//出版日期
char author[20];//作者
int page;//页数
int price;//价格
int imformation;//图书剩余数量
reader *a;//借阅人
struct booklist *next;
}Book;
void creatlist();//创建新的书本信息
void print(Book *head);//打印书本信息
void save(Book *head);//储存书本信息
void AddBook();//添加书本信息
void DelBook();//删除书本信息
Book *read();//读取书本信息
void manager();//管理员操作
void Bookconsult(); //图书查询
int Borrow();//借书
int Return();//还书
Book *sort(Book *head);//书本信息按书号排序
void imformation();//系统信息

Book *head=NULL,*p1=NULL,*p2=NULL;

//创建新的书本信息
void creatlist()
{
int i,n;
printf("要创建的书本数目");
scanf("%d",&n);
p2=head=(Book *)malloc(LEN); //创建带有头结点的链表
p2->a=(reader *)malloc(LEN3);
p2->a->next2=NULL;
p2->next=NULL;
printf("请输入书的信息:\n");
for(i=1;i<=n;i++)
{
p1=(Book *)malloc(LEN);
printf("书号: "); scanf("%s",p1->num);
printf("书名: "); scanf("%s",p1->name);
printf("出版社: "); scanf("%s",p1->concern);
printf("出版日期: "); scanf("%s",p1->date);
printf("作者: "); scanf("%s",p1->author);
printf("书本页数: "); scanf("%d",&p1->page);
printf("书本价格(元): "); scanf("%d",&p1->price);
p1->a=(reader *)malloc(LEN3);
p1->a->next2=NULL;
p1->imformation=10;
p1->next=NULL;
p2->next=p1;
p2=p1;
if(i<n) printf("下一本:\n");
}
head=sort(head);
save(head);
print(head);
}

//打印书本信息
void print(Book *head)
{
Book *p=NULL;
reader *p0=NULL;
p=head->next;
printf("*******************************************************************************\n");
while(p!=NULL)
{
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p->num,p->name,p->concern,p->date,p->author,p->page,p->price,p->imformation);
printf("借阅图书的人:");
if(p->a->next2==NULL) printf("------------暂无借阅人!");
else
{
for(p0=p->a->next2;p0!=NULL;p0=p0->next2)
{
printf("%s ",p0->name);
}
}
p=p->next; /* p后移一个结点 */
printf("\n");
printf("\n");
}
}
//书本信息按书号排序
Book *sort(Book *head)
{
Book *p1=NULL,*p2=NULL,*p3=NULL,*min=NULL,*min2=NULL,*head2=head->next;
p1=head2;
while(p1->next!=NULL)
{
min=p2=p1; /*把首结点作为最小值*/
while(p2->next!=NULL)
{
if(strcmp(min->num,p2->next->num)>0) /*首结点与下一结点比较*/
{
min2=p2;
min=p2->next;
}
p2=p2->next;
}
if(min!=p1)
{
min2->next=min->next; /*删除最小结点*/
min->next=p1; /*插入最小结点*/
if(p1==head2) head2=min;
else p3->next=min; /*p3为min前的结点指针*/
p3=min;
}
else
{
p3=p1;
p1=p1->next;
}
}
head->next=head2;
return(head);
}
//储存书本信息
void save(Book *head)
{
FILE *fp,*fp2;
Book *p=NULL;
reader *q=NULL;
fp=fopen("书本信息.txt","wb"); //printf("不能打开文件!\n");
fp2=fopen("借阅信息.txt","wb"); //printf("不能打开文件!\n");
p=head;
while(p!=NULL)
{
fwrite(p,LEN,1,fp); /*逐个结点写文件*/
for(q=p->a;q!=NULL;q=q->next2)
{fwrite(q,LEN3,1,fp2);}
p=p->next;
}
fclose(fp);
fclose(fp2);
}
//添加书本信息
void AddBook()
{
FILE *fp,*fp2;
Book *addbook=NULL;
reader *p0=NULL;
fp=fopen("书本信息.txt","ab"); //追加方式打开文件
fp2=fopen("借阅信息.txt","ab");
addbook=(Book *)malloc(LEN);
printf("输入书本信息:\n");
printf("书号: "); scanf("%s",addbook->num);
printf("书名: "); scanf("%s",addbook->name);
printf("出版社: "); scanf("%s",addbook->concern);
printf("出版日期: "); scanf("%s",addbook->date);
printf("作者: "); scanf("%s",addbook->author);
printf("书本页数: "); scanf("%d",&addbook->page);
printf("书本价格(元): "); scanf("%d",&addbook->price);
p0=(reader *)malloc(LEN3);
p0->next2=NULL;
addbook->a=p0;
addbook->imformation=10;
addbook->next=NULL;
fwrite(addbook,LEN,1,fp); /*块写*/
fwrite(p0,LEN3,1,fp2);
fclose(fp);
fclose(fp2);
}
//读取书本信息
Book *read()
{
FILE *fp,*fp2;
Book *p=NULL,*p1=NULL,*head=NULL;
reader *p0=NULL,*p2=NULL;
if((fp=fopen("书本信息.txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n");
if((fp2=fopen("借阅信息.txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n");
head=(Book *)malloc(LEN);
fread(head,LEN,1,fp);
p1=head;
p0=(reader *)malloc(LEN3);
fread(p0,LEN3,1,fp2);
p0->next2=NULL;
head->a=p0;
head->next=NULL;
p=(Book *)malloc(LEN);
while(fread(p,LEN,1,fp)) /*逐个结点读取*/
{
p1->next=p;
p1=p1->next;
p0=(reader *)malloc(LEN3);
p1->a=p0;
while(fread(p0,LEN3,1,fp2))
{
if(p0->next2==NULL)
{
p2=p0;
p0=(reader *)malloc(LEN3);
break;
}

p2=p0;
p0=(reader *)malloc(LEN3);
p2->next2=p0;
}
free(p0);
p2->next2=NULL;
p=(Book *)malloc(LEN);
}
p1->next=NULL;
free(p);
fclose(fp);
fclose(fp2);
head=sort(head);
if(head!=NULL) return(head);
else
{
printf("文件为空!\n");
return 0;
}
}
//删除书本信息
void DelBook()
{
Book *head=NULL,*p=NULL,*q=NULL;
char bookname[30];
head=read();
printf("输入要删除的书名: ");
scanf("%s",bookname);
p=head;
while(p!=NULL)/*按名字查找要删除的图书*/
{
if(strcmp(p->name,bookname)==0)
{
if(p==head)
{
head=head->next;
break;
}
else
{
q->next=p->next;
break;
}
}
q=p;
p=p->next;
}
save(head);
}
//管理员操作
void manager()
{
int n,i=0,k=1;
while(k==1)
{
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("请输入:");
scanf("%d",&n);
switch(n)
{
case 1: creatlist();break;
case 2: AddBook();break;
case 3: DelBook();break;
case 4: head=read();system("CLS");print(head);break;
case 5: system("CLS");Bookconsult();break;
case 6: k=0;break;
default: k=0;break;
}
}
}

//图书查询
void Bookconsult()
{
int n,m=1,sign=0;
Book *p=NULL,*p1=NULL,*p0=NULL,*head=NULL;
reader *p2=NULL;
char a[30],b[20],c[20];
head=read();
while(m==1)
{
printf(" 请选择你查询书本的方式: 1.按书名 2.按书的编号 3.按书的作者 4.退出查询\n");
printf("输入=");
scanf("%d",&n);
switch(n)
{
case 1: printf("请输入书名:");
scanf("%s",a);
p0=head;
while(p0!=NULL)
{
if(strcmp(a,p0->name)==0)
{
printf("*******************************************************************************\n");
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借阅图书的人:");
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)
{printf("%s ",p2->name);}
}
printf("\n");
sign=1;
p0=p0->next;
}
else p0=p0->next;
}
if(sign==0) printf("没有这本书的信息.\n");
break;
case 2: printf("请输入书的编号:");
scanf("%s",b);
p0=head;
while(p0!=NULL)
{
if(strcmp(b,p0->num)==0)
{
printf("*******************************************************************************\n");
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借阅图书的人:");
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)
{printf("%s ",p2->name);}
}
printf("\n");
break;
}
else p0=p0->next;
}
if(p0==NULL) printf("没有这本书的信息.\n");
break;
case 3: printf("请输入书的作者:");
scanf("%s",c);
p0=head;
while(p0!=NULL)
{
if(strcmp(c,p0->author)==0)
{
printf

("*******************************************************************************\n");
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借阅图书的人:");
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)
{printf("%s ",p2->name);}
}
printf("\n");
sign=1;
p0=p0->next;
}
else p0=p0->next;
}
if(sign==0) printf("没有这本书的信息.\n");
break;
default: m=0;break;
}
}
}

//借书
int Borrow()
{
char a[30],b[30],c;
Book *p0=NULL,*head=NULL;
reader *p2=NULL,*p3=NULL;
head=read();
printf("请输入要借的书的书号:");
scanf("%s",a);
p0=head->next;
while(p0!=NULL)
{
if((strcmp(a,p0->num))==0)
{
if(p0->imformation>0)
{
printf("图书在馆,可以借出,是否确定借出?'y'or'n'\n");
c=getchar();
scanf("%c",&c);
if(c=='y')
{
printf("请再次输入你的用户名:");
scanf("%s",b);
p3=(reader *)malloc(LEN3);
strcpy(p3->name,b);
if(p0->a->next2==NULL)
{
p0->a->next2=p3;
p3->next2=NULL;
}
else
{
for(p2=p0->a;p2->next2!=NULL;p2=p2->next2);
p2->next2=p3;
p3->next2=NULL;
}
--p0->imformation;
save(head);
printf("操作完成,可以带走图书。\n");
return 1;
break;
}
else
{
return 0;
break;
}
}
else printf("很抱歉,该图书不在馆.\n");return 0;break;
}
else p0=p0->next;
}
if(p0==NULL)
{
printf("很抱歉,没有这本书。\n");
return 0;
}
else return 2;
}

//还书
int Return()
{
Book *p0=NULL,*head=NULL;
reader *p2=NULL,*p3=NULL;
char c[20],b[30];
head=read();
printf("请输入要还的书的书号:");
scanf("%s",&c);
p0=head->next;
while(p0!=NULL)
{
if((strcmp(c,p0->num))==0)
{
printf("请输入你的用户名:");
scanf("%s",&b);
if(p0->a->next2==NULL) {printf("你没有借这本书!\n");break;}
else
{
p3=p0->a;
p2=p3->next2;
while(p2!=NULL)
{
if(strcmp(p2->name,b)==0)
{
if(p2->next2==NULL) {p3->next2=NULL;free(p2);break;}
else
{
p3->next2=p2->next2;
free(p2);
break;
}
}
else
{
p3=p2;
p2=p2->next2;
}
}
if(p2==NULL) printf("你没有借这本书!\n");
}
++p0->imformation;
save(head);
printf("书已归馆,操作完成。\n");
return 1;
break;
}
else p0=p0->next;
}
if(p0==NULL)
{
printf("没有这本书。\n");
return 0;
}
else return 2;
}
//借书信息
void imformation()
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ 欢迎你使用我们的图书管理系统!以下是本系统的有关说明: ※\n");
printf("※本系统主要功能是进行图书的有关管理,你可以进行图书信息的创建、插入、删除、 ※\n");
printf("※查询;在操作中主要是以阿拉伯数字来选择相应的菜单功能,在选择时以'y'表示 '是' ※\n");
printf("※以'n'表示'不是'。在你操作的时候就会有相应的操作提示。 ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
}

main()

{
int n,k=1;
printf("********************************************************************************\n");
printf("\n\n");
printf(" 欢迎进入我们的图书管理系统! \n");
printf("\n\n");
printf("********************************************************************************\n");
while(k==1)
{
printf(" 请选择你的操作: 1.管理员操作 2.系统信息 3.退出系统\n");
printf("********************************************************************************\n");
printf(" 你的选择是:");
scanf("%d",&n);
system("CLS");
switch(n)
{
case 1: manager();break;
case 2: imformation();break;
default: printf("+++++++++++++++++++++++++++欢迎你再次使用我们的系统!++++++++++++++++++++++++++++\n");k=0;break;
}
}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-28
#include <stdio.h>

struct student
{
int no; //学号
char name[10];
float math,english,computer; //三门课程的成绩
double total; //总成绩
double avr; //平均成绩
};

struct student stu[50]; //声明一个结构数组变量

struct student input();
void display(struct student stud[],int count);
void sort(struct student stud[],int count);
void stat(struct student stud[],int count);

void main()
{
int count;
char ch;
ch='y';

printf("请按以下格式输入学生信息(可用Tab键对齐):");
printf("\n");
count=0;
while ((ch=='y') || (ch=='Y'))
{
stu[count]=input(); //调用录入信息函数
count++;
printf("\n是否继续?(按Y继续,其它结束)");
scanf(" %c",&ch);
}
printf("\n学生信息如下:");
sort(stu,count); //调用排序函数
display(stu,count); //调用显示信息函数
stat(stu,count);//调用统计平均分函数

}

struct student input() //录入信息函数
{
struct student studn;

printf("\n学号\t姓名\t数学\t英语\t计算机\n");
scanf("%d%s%f%f%f",&studn.no,studn.name,&studn.math,&studn.english,&studn.computer);

studn.total=studn.math+studn.english+studn.computer;
studn.avr=studn.total/3.0;

return studn;
}

void display(struct student stud[],int count) //显示信息函数
{
int i;
printf("\n排名\t学号\t姓名\t数学\t英语\t计算机\t总分\t平均分");
printf("\n");
for(i=0;i<count;i++)
{
printf("%d",i);
printf("\t%d",stud[i].no);
printf("\t%s",stud[i].name);
printf("\t%.1f",stud[i].math);
printf("\t%.1f",stud[i].english);
printf("\t%.1f",stud[i].computer);
printf("\t%.2f",stud[i].total);
printf("\t%.2f",stud[i].avr);
printf("\n");
}
}

void sort(struct student stud[],int count) //排序函数
{
int i,j;

/* 冒泡排序法*/
struct student t;
for(i=0;i<count;i++)
for(j=0;j<count-i-1;j++) //比较元素
{
if(stud[j].avr<stud[j+1].avr)
{
t=stud[j];
stud[j]=stud[j+1];
stud[j+1]=t;
}
}
}

void stat(struct student stud[],int count)
{
int i,j=0;
double avr=0;
for(i=0;i<count;i++)
avr += stud[i].avr;
avr /= count;
printf("全班平均分为%.2f,\n在平均分以上的同学有:\n",avr);
for(i=0;i<count;i++)
if(stud[i].avr>=avr)
{printf("%s\t",stud[i].name);j++;
if(j%5==0) printf("\n");}
printf("\n");
}
相似回答