华清远见C语言学习笔记八

/*
 * test.c
 *
 *  Created on: Jun 29, 2012
 *      Author: 孙旭
 *      华清远见实验室
 */
/*使用链表和文件组合操作*/
#include <stdio.h>
#include<malloc.h>
#pragma pack(2)
 typedef struct
{
 char name[10];
 char sno[15];
 int age;
 char sex[10];
 struct student *next;
}student;
void AddStudentIoFile();
void writeStudentFile(student *stu);
void readStudentFile();
void ClearFile();
void menu();
void ReadRecordOfIndex();
void InsertStudentOfIndex();
void FindRecordByName();
int CompareString(char str1[],char str2[]);
int main() {
 int choice;
 menu();
 while(1)
 {
 puts("请选择菜单项:");
 scanf("%d",&choice);
 switch(choice)
       {
 case 1:
  AddStudentIoFile();
  break;
 case 2:
    readStudentFile();
        break;
 case 3:
  ReadRecordOfIndex();
       break;
 case 4:
  InsertStudentOfIndex();
  break;
 case 5:
  FindRecordByName();
  break;
 case 6:
  ClearFile();
  break;
 default:
  puts("结束输入\n");
  return 0;
        }
 }
 return 0;
}
void menu()
{
 puts("+++++++++++++++++++++");
 puts("1.写入学生记录");
 puts("2.显示文件所有记录");
 puts("3.按索引读文件记录");
 puts("4.按索引插入学生记录");
 puts("5.按名字查找记录");
 puts("6.清空文件");
 puts("++++++++++++++++++++++");
}
void AddStudentIoFile()
{
 student *head,*pend,*p;
   pend=(student*)malloc(sizeof(student));
   head=pend;
 int num,i=0;
 puts("请输入要插入学生的个数:");
 scanf("%d",&num);
 puts("请输入学生信息:");
 scanf("%s %s %d %s",pend->name,pend->sno,&pend->age,pend->sex);
 for(i=0;i<num-1;i++)
 {
  p=(student*)malloc(sizeof(student));
  scanf("%s %s %d %s",p->name,p->sno,&p->age,p->sex);
  pend->next=p;
  pend=p;
  pend->next=NULL;
 }
 writeStudentFile(head);
}
void writeStudentFile(student *stu)
{
 FILE *fp;
 fp=fopen("/home/linux/sunxu.txt","ab+");
 do
 {
  fwrite(stu,sizeof(student),1,fp);
  stu=stu->next;
 }while(stu!=NULL);
printf("完成写信息到文件!!\n");
fclose(fp);
}
void readStudentFile()
{
 FILE *fp;
 student *stu=NULL;
 fp=fopen("/home/linux/sunxu.txt","rb");
 stu=(student*)malloc(sizeof(student));
 fread(stu,sizeof(student),1,fp);
 printf("开始读文件信息!!\n");
 do
  {
   printf("%s\t%s\t%d\t%s\n",stu->name,stu->sno,stu->age,stu->sex);
   fread(stu,sizeof(student),1,fp);
  }while(!feof(fp));
 printf("完成读文件信息!!\n");
 fclose(fp);
}
void ClearFile()
{
 FILE *fp;
 fp=fopen("/test/hu.txt","wb+");
 if(fp)printf("清空完成\n");
 fclose(fp);
}
void ReadRecordOfIndex()
{
 FILE *fp;
 int index;
 student *stu;
  fp=fopen("/home/linux/sunxu.txt","rb+");
  if(!fp)printf("打开文件失败!!");
  puts("请输入要读记录的索引号:");
  scanf("%d",&index);
  stu=(student*)malloc(sizeof(student));
  fseek(fp,(index-1)*sizeof(student),0);
  fread(stu,sizeof(student),1,fp);
  printf("%s\t%s\t%d\t%s\n",stu->name,stu->sno,stu->age,stu->sex);
  fclose(fp);
}
void InsertStudentOfIndex()
{
 int i=0,index,count;
 student stu[25],*stuToIns;
 FILE *fp;
 //stu=(student*)malloc(sizeof(student));
 fp=fopen("/test/hu.txt","rb+");
   if(!fp)printf("打开文件失败!!");
   puts("请输入要插入记录的索引:");
   scanf("%d",&index);
   fseek(fp,(index-1)*sizeof(student),0);
 while(!feof(fp))
 {
  fread(&stu[i],sizeof(student),1,fp);
  i++;
 }
 count=i+1;
 for(i=0;i<count;i++)
 {
  printf("%s\t%s\t%d\t%s\n",stu[i].name,stu[i].sno,stu[i].age,stu[i].sex);
 }
 stuToIns=(student*)malloc(sizeof(student));
 puts("输入插入学生的信息:");
 scanf("%s %s %d %s",stuToIns->name,stuToIns->sno,&stuToIns->age,stuToIns->sex);
 fseek(fp,(index-1)*sizeof(student),0);
 fwrite(stuToIns,sizeof(student),1,fp);
 for(i=0;i<count;i++)
 {
  fwrite(&stu[i],sizeof(student),1,fp);
 }
 puts("插入记录成功!!");
 fclose(fp);
}
void FindRecordByName()
{
 student *stu;
 char findname[20];
 stu=(student*)malloc(sizeof(student));
 FILE *fp;
 fp=fopen("/home/linux/sunxu.txt","rb+");
 puts("请输入要查找的名字:");
 scanf("%s",findname);
 //printf("%s",findname);
 while(!feof(fp))
 {
  fread(stu,sizeof(student),1,fp);
  if(CompareString(findname,stu->name)==1)
   {
   printf("%s\t%s\t%d\t%s\n",stu->name,stu->sno,stu->age,stu->sex);
   return;
   }
 }
  puts("没发现含该名字的记录");
}
int CompareString(char str1[],char str2[])
{
 int i;

 for(i=0;i<strlen(str1);i++)
 {
  if(str1[i]!=str2[i])return 0;
 }
 return 1;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值