简易信息统计系统

原创 2004年09月14日 22:06:00

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct info
{
 char num[20];
 char name[10];
 float cj;
 struct info *next;
 struct info *last;
};

void author();
struct info* input(struct info *);
struct info* search(char *,struct info *);
struct info* del(char *,struct info *);
struct info* deleteMenu(struct info *);
void searchMenu(struct info *fPtr);
void saveData(struct info *);
struct info* loadData(struct info *);
void showAll(struct info *);
struct info* sort(struct info *);

void main()
{

 struct info *first=0;
 int choose;
 author();
 while(1){
  printf("**********************************************************/n");
  printf("* 1:加入一个新纪录  2:删除一个记录  3:查询(修改)一个记录 */n");
  printf("* 4:退出程序        5:保存数据      6:载入数据           */n");
  printf("* 7:显示全部记录    8:按成绩排序记录                     */n");
  printf("**********************************************************/n");
  printf("请选择(1~8):");
  scanf("%d",&choose);
  printf("/n");
  
  switch(choose){
  case 1:
   first=input(first);
   break;
  case 2:
   first=deleteMenu(first);
   break;
  case 3:
   searchMenu(first);
   break;
  case 4:
   return;
  case 5:
   saveData(first);
   break;
  case 6:
   first=loadData(first);
      break;
  case 7:
   showAll(first);
   break;
  case 8:
   first=sort(first);
   break;
  default:
   printf("输入错误!/n/n/n");
   break;
  }
 printf("/n/n/n");
 }
}


struct info *input(struct info *fPtr)
{
 struct info *i;
 i=(struct info*)malloc(sizeof(struct info));

 printf("输入该生学号:");
 scanf("%s",i->num);
 printf("输入该生姓名:");
 scanf("%s",i->name);
 printf("输入该生成绩:");
 scanf("%f",&(i->cj));
 
 (i->next)=fPtr;
 if(fPtr!=0){
  (fPtr->last)=i;
 }
 (i->last)=0;
 fPtr=i;
 return fPtr;
}


struct info* del(char *s,struct info *fPtr)
{
 struct info *r;
 r=search(s, fPtr);
 if(r==0){
  printf("没有记录可删除!/n/n/n");
  return fPtr;
 }
 else{
  if(r==fPtr){
   fPtr=fPtr->next;
      free(r);
   printf("删除成功!/n/n/n");
   return fPtr;
  }
  ((r->last)->next)=(r->next);
  free(r);
  printf("删除成功!/n/n/n");
  return fPtr;
 }
}


struct info *search(char *s,struct info *fPtr)
{
 int r;
 if(fPtr==0){
  return 0;
 }
 while(1){
  r=strcmp(fPtr->num, s);
  if(r==0){
   return fPtr;
        }
  r=strcmp(fPtr->name,s);
        if(r==0){
   return fPtr;
        }
  if((fPtr->next)!=0){
   fPtr=(fPtr->next);
  }
  else{
   return 0;
  }
 }
}


struct info* deleteMenu(struct info *fPtr)
{
 char nn[20];
 printf("输入该生姓名或学号:");
 scanf("%s",nn);
 return del(nn,fPtr);
}


void searchMenu(struct info *fPtr)
{
 int yorn;
 char nn[2];
 struct info *r;
 printf("输入该生姓名或学号:");
 scanf("%s",nn);
 r=search(nn,fPtr);
 if(r==0){
  printf("查无记录!/n/n/n");
  return;
 }
 else{
  printf("学号:%s 姓名:%s 成绩:%f/n/n/n",r->num,r->name,r->cj);
     printf("是否要修改?(1=是 , 0=否)");
  scanf("%d",&yorn);
  if(yorn==1){
   printf("输入该生学号:");
   scanf("%s",r->num);
   printf("输入该生姓名:");
   scanf("%s",r->name);
   printf("输入该生成绩:");
   scanf("%f",&(r->cj));
   printf("修改成功!/n/n/n");
  }
 }
}


void saveData(struct info *fPtr)
{
 FILE *fp;
 if(fPtr==0){
  printf("没有记录可保存!/n/n/n");
  return;
 }

 fp=fopen("info.stu","wb+");
 while(1){
  fwrite(fPtr,sizeof(struct info),1,fp);
  fPtr=(fPtr->next);
  if(fPtr==0){
   break;
  }
 }
 printf("保存成功!/n");
 fclose(fp);
}


struct info* loadData(struct info *fPtr)
{
 struct info *now=0;
 struct info *up=0;
 FILE *fp;
 if((fp=fopen("info.stu","rb"))==NULL){
  printf("无法打开文件");
  return fPtr;
 }
    fPtr=(struct info*)malloc(sizeof(struct info));
 up=fPtr;
 fread(fPtr,sizeof(struct info),1,fp);
 if((fPtr->next)==0){
  printf("数据载入成功!/n/n/n");
  return fPtr;
 }
 while(1){
     now=(struct info*)malloc(sizeof(struct info));
        fread(now,sizeof(struct info),1,fp);
  (now->last)=up;
  (up->next)=now;
  up=now;
  if((now->next)==0){
   fclose(fp);
   printf("数据载入成功!/n/n/n");
   return fPtr;
  }
 }
}


void showAll(struct info *fPtr)
{
 if(fPtr==0){
  printf("没有记录!/n/n/n");
  return;
 }
 while(1){
  printf("学号:%s 姓名:%s 成绩:%f/n-----------------------------/n",fPtr->num,fPtr->name,fPtr->cj);
  fPtr=fPtr->next;
  if(fPtr==0){
   printf("显示成功!/n/n/n");
   return;
  }
 }
}

void author()
{
 printf("   ***********************************************/n");
 printf("   *            简易成绩              作者:周伟 */n");
 printf("   *            统计系统              版本:1.1  */n");
 printf("   ***********************************************/n/n/n");
}


struct info* sort(struct info *fPtr)
{
 struct info *now;
 struct info *ne;
 struct info *temp=0;

 if(fPtr==0){
  printf("没有记录可排序!");
  return fPtr;
 }
 
 while(1){
  int i=0;
  int j=1;
  now=fPtr;
  ne=(fPtr->next);
  if((now->next)==0){
   printf("排序成功!");
   return fPtr;
  }
  while(1){
   if((now->cj)<(ne->cj)){
    temp=(ne->next);
    (ne->next)=now;
    (now->next)=temp;
    temp=(now->last);
    (now->last)=ne;
    (ne->last)=temp;
    if(temp!=0){
     (temp->next)=ne;
    }
    if(j==1){
     fPtr=ne;
    }
    ne=(now->next);
       i=1;
   }
   else{
    now=ne;
    ne=(ne->next);
   }
   j++;
   if((now->next)==0){
    break;
   }
   
  }
  if(i==0){
   printf("排序成功!");
   return fPtr;
  }
 }
}

Linux系统的简易安装

为了学习Linux系统又不放弃原有的系统,需要安装一个虚拟机,将Linux系统安装在其上。 对于虚拟机的选择,首先想到了VMware WorkStation(以下简写为VMW)但不知出现了什么问题,...
  • u010485442
  • u010485442
  • 2015年08月25日 11:00
  • 1056

Oracle性能分析11:系统统计信息

早期Oracle查询优化器的开销计算是基于执行SQL语句所需要的物理读,这个方法被叫做I/O开销模式(I/O cost model),这个方法的主要缺点是认为单块读和多块读开销相当。在Oracle 8...
  • liuy_98_1001
  • liuy_98_1001
  • 2014年10月09日 16:51
  • 1492

第十二章——SQLServer统计信息(3)——发现过期统计信息并处理

前言:        统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要返回的数据。        在创建列的统计信息后,在DML操作如...
  • DBA_Huangzj
  • DBA_Huangzj
  • 2013年03月21日 17:38
  • 5069

SQL Server 统计信息理解(总结)

前言 Sqlserver 查询是基于开销查询的,在首次生成执行计划时,是基于多阶段的分析优化才确定出较好的执行计划。而这些开销的基数估计,是根据统计信息来确定的。统计信息其实就是对表的各个字段的总体数...
  • kk185800961
  • kk185800961
  • 2015年01月17日 17:21
  • 5399

mysql如收集统计信息

查询优化器使用统计信息为sql选择执行计划 Mysql没有直方图信息,也无法手工删除统计信息   如何收集统计信息 Analyze table收集表和索引统计信息,适用于MyISAM和InnoDB; ...
  • jumewo
  • jumewo
  • 2015年07月16日 10:46
  • 935

PostgreSQL学习篇13.1 统计信息的收集

PgStat子进程是PostgreSQL中专门的统计信息收集器进程。表和索引的行数、块数等统计信息记录在系统表pg_class中,其他的统计信息主要收集在系统表pg_statistic中。 统计信息...
  • ghostliming
  • ghostliming
  • 2017年02月05日 13:39
  • 932

ORACLE收集统计信息

1.     理解什么是统计信息优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划。优化器统计信息包括:·        ...
  • caixingyun
  • caixingyun
  • 2015年09月07日 17:26
  • 1714

oracle系统统计信息

系统统计信息主要描述了与系统硬件相关的某些特性,例如cpu和io系统的性能和利用率等。这些信息对于查询优化器来说是非常重要的,在选择执行计划的过程中,oracle优化器会利用系统统计信息来评估执行计划...
  • joeadai
  • joeadai
  • 2013年12月27日 11:20
  • 1217

Mysql 收集统计信息

如何收集统计信息 Analyze table收集表和索引统计信息,适用于MyISAM和InnoDB; 对于innodb表,还可以使用以下选项 1 表第一次打开的时候 2 表修改的行超过1/16...
  • gua___gua
  • gua___gua
  • 2015年06月15日 16:53
  • 2646

oracle系统统计信息

http://www.2cto.com/database/201312/268183.html 系统统计信息主要描述了与系统硬件相关的某些特性,例如cpu和io系统的性能和利用率...
  • mjj291268154
  • mjj291268154
  • 2016年08月22日 18:10
  • 197
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简易信息统计系统
举报原因:
原因补充:

(最多只允许输入30个字)