资源简介

1、从文本文件中导入班级学生信息:学号、姓名、性别、籍贯 2、将学号重复的删除 3、显示导入的学生信息(文件加后缀) 4、按学号、姓名、性别、籍贯相等和不相等查找 5、多次查找 6、查找结果写入文件 7、VC++6.0编译通过

资源截图

代码片段和文件信息

/*
1、从文本文件中导入班级学生信息:学号、姓名、性别、籍贯
2、将学号重复的删除
3、显示导入的学生信息
4、按学号、姓名、性别、籍贯相等和不相等查找
5、多次查找
6、查找结果写入文件
7、VC++6.0编译通过

*/

#include 
#include 
#include 
#include  
#include 
#include 


#define CLRSCR system(“cls“)
#define PRINT_title “\n序号\t学号\t\t姓名\t性别 \t籍贯\n“
#define PRINT_FORMAT “%d\t%s\t%s\t%s\t%s\n“ip->stu.nump->stu.namep->stu.sexp->stu.hometown
#define WRITE_FORMAT “%s\t%s\t%s\t%s\n“p->stu.nump->stu.namep->stu.sexp->stu.hometown
#define READ_FORMAT “%s %s %s %s“&p->stu.num&p->stu.name&p->stu.sex&p->stu.hometown

//定义学生结构体
struct student
{
char num[9];
char    name[7];//三个汉字长度为6个字节,如果不多定义一个字节来存放字符串结束符‘\0‘,当输出name时会把sex和hometown也输出
char sex[3];
char hometown[7];

};

//定义单链表结点
typedef struct listnode  
{
struct student stu;
struct listnode *next;
}node;

int MySelect(node * headnode *temp)   //返回查找到符合条件的项目数
{
int equalN;
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=0flag; 
node *p*tp=temp;
p=head->next;

while (NULL!=p)
{
flag=strcmp((char *)p+NCHAR);
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_FORMAT);





p=p->next;

}

if(i==0)
printf(“\n\t没有查找到符合条件的信息\n“);

return i;
}



void InsertSort(node *head)//学号从小到大排序

node *p*q*r*u;
    p=head->next;  
head->next=NULL;
    while(p!=NULL)
    {
r=head;  
q=head->next;
         
while(q!=NULL&& strcmp(q->stu.nump->stu.num)<0) //成立则基点向后移
{
r=q; 
q=q->next;
}
u=p->next; 
p->next=r->next;   //p->stu.num比q->stu.num小,放到q->stu.num前面
r->next=p;  

p=u;//下一上节点与基点进行比较
}
}

void CheckNum(node *head)
{
/*删除学号重复的条目*/
node *release*p;
p=head->next;
int m=0;
while(NULL!=p->next)
{
node *p2=p;

while(NULL!=p2->next)
{
if(0==strcmp(p->stu.nump2->next->stu.num))
{ m++;
if(m==1)
printf(“\t\t以下条目因学号与前面的信息冲突而没有导入\n“);

printf (“%d\t%s\t%s\t%s\t%s\n“mp2->next->stu.nump2->next->stu.name\
p2->next->stu.sexp2->next->stu.hom

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1548  2011-04-17 08:54  class.txt

     文件       8270  2011-04-17 09:10  class.cpp

----------- ---------  ---------- -----  ----

                 9818                    2


评论

共有 条评论