c语言 删除文件操作例子,C语言文件读取和单链表的添加、删除和排序等操作实例.doc...

C语言文件读取和单链表的添加、删除和排序等操作实例

C语言文件读取和单链表的添加、删除和排序等操作实例

/*

1、从文本文件中导入班级学生信息:学号、姓名、性别、籍贯

2、将学号重复的删除

3、显示导入的学生信息

4、按学号、姓名、性别、籍贯相等和不相等查找

5、多次查找

6、查找结果写入文件

7、VC++6.0编译通过

//以下代码存为main.cpp

*/

#include

#include

#include

#include

#include

#include

#define CLRSCRsystem("cls")

#define PRINT_TITLE "\n序号\t学号\t\t姓名\t性别 \t籍贯\n"

#define PRINT_FORMAT "%d\t%s\t%s\t%s\t%s\n",i,p->stu.num,p->stu.name,p->stu.sex,p->stu.hometown

#define WRITE_FORMAT "%s\t%s\t%s\t%s\n",p->stu.num,p->stu.name,p->stu.sex,p->stu.hometown

#define READ_FORMAT "%s %s %s %s",&p->stu.num,&p->stu.name,&p->stu.sex,&p->stu.hometown

//定义学生结构体

struct student

{

charnum[9];

char name[7];//三个汉字长度为6个字节,如果不多定义一个字节来存放字符串结束符'\0',当输出name时会把sex和hometown也输出

charsex[3];

charhometown[7];

};

//定义单链表结点

typedef struct listnode

{

struct student stu;

struct listnode *next;

}node;

int MySelect(node * head,node *temp) //返回查找到符合条件的项目数

{

int equal,N;

char CHAR[10];

printf("----------------------------------------------\n\n");

printf("查找模式:1是相等查找,0是不相等查找\n");

printf("列名编号:1是学号,2是姓名,3是性别,4是籍贯\n");

printf("\n--------------------------------------------\n");

do

{

printf("\n选择查找模式:");//用scanf时输入字母会错误 改用getche,不用scanf

equal=getche();

if((equal!='1')&&(equal!='0'))

printf("\n\t输入错误\n");

}

while((equal!='1')&&(equal!='0'));

equal=equal-48;

do

{

printf("\n输入列名编号:");

N=getche();

if(N!='1'&&N!='2'&&N!='3'&&N!='4')

printf("\n\t输入错误\n");

}

while(N!='1'&&N!='2'&&N!='3'&&N!='4');

switch(N)

{

case '1':N=0;break;

case '2':N=9;break;

case '3':N=16;break;

case '4':N=19;break;

}

printf("\n输入关键字:");

scanf("%s",CHAR);

int i=0,flag;

node *p,*tp=temp;

p=head->next;

while (NULL!=p)

{

flag=strcmp((char *)p+N,CHAR);

if((abs(flag)+equal)==1)//当equal为1时是相等查找,为0时是不相等查找

{

node *end;

end = (node *)malloc(sizeof(node));

tp->next=end;

tp=end;

tp->next=NULL;

tp->stu=p->stu;

if(i==0)

printf (PRINT_TITLE);

i++;

printf(PRINT_FOR

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值