用C++进行学生成绩统计分析

[复制链接]
查看11 | 回复1 | 2009-12-28 15:00:05 | 显示全部楼层 |阅读模式
我以前写了一个图书管理系统和这个差不多稍微改改就可以得到你要的我的代码==》图书管理系统2009年07月18日 星期六 上午 00:50#include#include#include#include#include#include//system("color 1e");字体颜色及背景颜色typedef struct lab{
char title[30];
char number[20];
char owner[20];
char press[30];
struct lab *next;}book;typedef struct {
char title[30];
char number[20];
char owner[20];
char press[30];}books;book *L;//全局变量FILE *fp;book * start()//初始化{L=(book *)malloc(sizeof(book));L->next=NULL;return(L);}void append(book *L)//头插法创建单链表{
void menu();int a=1;
char Title[30];
char Number[20];
char Owner[20];
char Press[30];
book *p;
printf ("请依次输入图书信息:\n(输入书名000时结束添加)\n\n");printf ("\n请输入书名:");gets(Title);while(strcmp(Title,"000")!=0){ printf ("请输入图书编号:"); gets(Number); printf ("请输入作者姓名:"); gets(Owner); printf ("请输入出版社:"); gets(Press);
while(strcmp(Title,"000")!=0) {
p=(book *)malloc(sizeof(book));
strcpy(p->title,Title);
strcpy(p->number,Number);
strcpy(p->owner,Owner);
strcpy(p->press,Press);
p->next=L->next;
L->next=p;
printf ("\n请输入书名:");
gets(Title);
if(strcmp(Title,"000")==0)
{
void save(book *L,char filename[30]);
printf("\t数据保存中……\n");
save(L,"dat");//同步数据
printf("\t保存成功!!!\n");
break;
}
printf ("请输入图书编号:");
gets(Number);
printf ("请输入作者姓名:");
gets(Owner);
printf ("请输入出版社:");
gets(Press);
}}}void print1(){printf(" ====书名===============编号=======作者================出版社============== \n");} void print2(book *m)//输出一个结点{printf("
%-15s
%-7s
%-15s %s\n",m->title,m->number,m->owner,m->press);}void print3(){printf(" ==========================================================================\n");}void Delete(book *L,char number[20])//删除图书信息 {void menu(void);void save(book *L,char filename[30]);void Delete(book *L,char number[20]);book *q,*p;p=L;char choice[10];if(p->next!=NULL){ while(p->next!=NULL) {
if(strcmp(p->number,number)==0) break;
else
{
q=p;
p=p->next;
} } if(p->next==NULL)
{
if(strcmp(p->number,number)==0)//判断是不是正好最后一个与之匹配
{
printf("该图书信息如下:\n");
print1();
print2(p);
print3();
printf("\t确认删除请输入y,撤消请输入n:");
gets(choice);
if(strcmp(choice,"y")==0)
{
q->next=q->next->next;
printf("\t数据保存中……\n");
save(L,"dat");//同步数据
printf("\t删除成功!!!\n");
free(p);
}
else if(strcmp(choice,"n")==0)
printf("删除取消!");
else
printf("\n抱歉,您的输入有误!\n\n");
}
else
printf("\n\t\t\t抱歉!书库中没有该图书!\n\n"); }
else
{
printf("该图书信息如下:\n");
print1();
print2(p);
print3();
printf("\t确认删除请输入y,撤消请输入n:");
gets(choice);
if(strcmp(choice,"y")==0)
{
if(strcmp(p->number,number)==0)
{
q->next=q->next->next;
printf("\t数据保存中……\n");
save(L,"dat");//同步数据
printf("\t删除成功!!!\n");
free(p);
}
}
else if(strcmp(choice,"n")==0)
printf("删除取消!");
//menu();
else
printf("\n抱歉,您的输入有误!\n\n");
}
}else
printf("\n抱歉,书库里还没有藏书!\n");system("pause");
system("cls");//清屏函数}//3,搜索 图书编号->searchNumber(L,number2);void searchNumber(book *L,char number2[20]){book *p;p=L;if(p->next!=NULL)//当书库非空{ do {
p=p->next;
if(strcmp(p->number,number2)==0)
{
printf("搜到图书如下:\n");
print1();
print2(p);
print3();
break;
} }while(p->next!=NULL);
if((p->next==NULL)&&(strcmp(p->number,number2)!=0)) //到最后一个结点依然没匹配
printf("\n\t\t\t抱歉!没有该编号的图书!!\n\n");
}else
printf("\n抱歉,书库里还没有藏书!\n");system("pause");
system("cls");//清屏函数}//4,搜索 书名->searchName(L,s);void searchName(book *L,char s[20]){
book *p;p=L;int i=0;if(p->next!=NULL){
print1();
while(p->next!=NULL) {
p=p->next;
if(strcmp(p->title,s)==0)
{
print2(p);
i=i+1;
} }
printf("\n\t\t\t找到 %d 本该作者的图书!!\n",i);//判断是不是正好是尾结点与之匹配
print3();
}else
printf("\n\n\t\t\t书库里还没有藏书\n\n");system("pause");
system("cls");//清屏函数
}//5,搜索 作者->searchOwner(L,t);void searchOwner(book *L,char t[20]){book *p;p=L;int i=0;if(p->next!=NULL){
print1();
while(p->next!=NULL)//不为空时,打印出该作者所有图书信息 {
p=p->next;
if(strcmp(p->owner,t)==0)
{
print2(p);
i=i+1;
} }
printf("\n\t\t\t找到 %d 本该作者的图书!!\n",i);//判断是不是正好是尾结点与之匹配
print3();
}else
printf("\n\n\t\t\t抱歉,书库里还没有藏书!\n\n");system("pause");
system("cls");//清屏函数}//6,搜索 出版社->searchPress(L,f);void searchPress(book *L,char f[30]){int i=0;//记录符合条件的结点数book *p;p=L;if(p->next!=NULL){ print1();
while(p->next!=NULL)//不为空时,打印出该作者所有图书信息 {
p=p->next;
if(strcmp(p->press,f)==0)
{
print2(p);
i++;
} } printf("\n\t\t\t找到 %d 本该出版社的图书!!\n",i); print3();
}else {printf("\n\n\t\t\t抱歉,书库里还没有藏书!\n\n");}system("pause");
system("cls");//清屏函数}book * load(char filename[30])//信息加载,将所有原来的信息加载到链表中,在打开程序时自动加载{book *p,*head;//结构体指针books per;//定义结构体变量perhead=(book*)malloc(sizeof(book));//申请空间p=head->next=NULL;if((fp=fopen(filename,"rb"))==NULL)//为输入打开一个二进制文件{
printf("\n\t\t\t原有信息加载失败!!\n"); system("pause"); return head;}else{ while(!feof(fp))//文件没结束 {
if(fread(&per,sizeof(books),1,fp)==1)
//fread(&per,sizeof(struct person),1,fp)
//从fp所指向的文件读入1个sizeof(books)字节的数据,
//存储到结构体变量per中
{
p=(book*)malloc(sizeof(book));//申请结点空间
strcpy(p->title,per.title);
strcpy(p->number,per.number);
strcpy(p->owner,per.owner);
strcpy(p->press,per.press);
p->next=head->next;head->next=p; //赋值
} } fclose(fp); return head;}}//7,保存所有信息->save(void);void save(book *L,char filename[30])//保存信息,当对链表进行了 添加,删除,修改时调用,确保文件信息与链表中信息一致{
books per;
book *p;p=L->next;if((fp=fopen(filename,"wb"))==NULL)//"wb+"(读写) 为读/写建立一个新的二进制文件 //"w+".首先建立一个新文件,进行写操作,随后可以从头开始读.(若文件存在,原内容将全部消失){ printf("文件打开失败\n");
exit(1);}else{ while(p!=NULL) {
strcpy(per.title,p->title);
strcpy(per.number,p->number);
strcpy(per.owner,p->owner);
strcpy(per.press,p->press);
if(fwrite(&per,sizeof(books),1,fp)!=1)
{
printf("文件打开失败!!\n");
exit(0);
}
p=p->next ; } fclose(fp);} }void Free(book *L)//结点空间释放{book *p,*q=NULL;p=L;while(p){ q=p->next; free(p);
p=q;}}void menu(void)//主菜单函数{
int i=0,c;char m[20];
char number1[20],number2[20];
char s[30],t[10],f[30];
printf("\n\t\t***********欢迎登陆图书管理系统***************\n\n");
printf("\t\t
☆添加图书信息
请输入1;\n\n") ;
printf("\t\t
☆删除图书信息
请输入2;\n\n") ;
printf("\t\t
☆搜 索 图 书
请输入3;\n\n");
printf("\t\t
☆列出所有信息
请输入4;\n\n") ;printf("\t\t
☆保存并退出
请输入5;\n\n") ;
printf("\t\t**********************************************\n\n");
fflush(stdin);//清除键盘缓存区,避免当m输入一组字符串时,程序崩溃
printf("\t请输入相应指令(1~5):");
gets(m);
printf("\n\n");
if((strcmp(m,"1")==0)) append(L);
else if((strcmp(m,"2")==0))
{
printf("请输入要删除图书的编号:");
gets(number1);
Delete(L,number1);
}
else if((strcmp(m,"3")==0))
{ char choice[10];
printf("\t\t
●按编号搜索=====>请输入1;\n");
printf("\t\t
●按书名搜索=====>请输入2;\n");
printf("\t\t
●按作者搜索=====>请输入3;\n");
printf("\t\t
●出版社搜索=====>请输入4;\n\n");
printf("请选择操作:");
gets(choice);
if((strcmp(choice,"1")==0)) {
printf("请输入图书编号:");
gets(number2);
searchNumber(L,number2); }
else if((strcmp(choice,"2")==0)) {
printf("请输入图书书名:");
gets(s);
searchName(L,s);
}
else if((strcmp(choice,"3")==0))
{
printf("请输入图书作者:");
gets(t);
searchOwner(L,t);
}
else if((strcmp(choice,"4")==0))
{
printf("请输入图书出版社:");
gets(f);
searchPress(L,f);
}
else
printf("\n抱歉,您的输入有误!\n\n");}
else if((strcmp(m,"4")==0))
{
book *p;
p=L;
print1();
while(p->next!=NULL) {
p=p->next;
print2(p);
i++; }
print3();
printf("\n\t\t\t该图书馆共有 %d 本图书的信息\n\n",i);
system("pause");
system("cls");//清屏函数}
else if((strcmp(m,"5")==0))
{
printf("\t保存中……\n");
save(L,"dat");
printf("\t成功!!!\n");
Free(L);
exit(1);
}
else
{ printf("\n抱歉,您的输入有误!\n\n");
system("pause"); system("cls");//清屏函数
}}void main(){
system("color 1e");L=start();
L=load("dat");//信息加载,将所有原来的信息加载到链表中,在打开程序时自动加载while(1){
menu();}}
回复

使用道具 举报

千问 | 2009-12-28 15:00:05 | 显示全部楼层
struct studdent{str name[20];int number[20];char sex[20];int a[20];}stu;for(i=0;i<=20;i++)scanf("input the name:\n");scanf("str",&name);for(j=0;j<=20;j++)scanf("%d",&number[j]);,,,,,不好意思,忘了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行