计算机专业,毕业答辩项目 自写信息管理系统——利用C语言快速实现二
feature.cpp
#include"head.h"
/********************获取文件名;读取内容;给num,fp,head,flieopenname赋值;创建链表***********************/
//打开文件,并读取文件
int read_file()
{
int i;
int fno,fsize;
if((fp=fopen("student_system.txt","rt"))==NULL)//判断文件是否存在,若存在打开
{ //否则询问是否继续打开
printf("\n库文件不存在!\n");
return 0;
}
rewind(fp); //使文件内部指针移动到文件的开始位置
fno=fileno(fp); //获取文件描述字
fsize=filelength(fno); //计算文件大小,以字节为单位
num=fsize/sizeof(Node); //计算文件包含的学生信息数目
iend=inew=(STUDENT *)malloc(sizeof(STUDENT));//申请动态空间
fread(inew,sizeof(Node),1,fp); //以Node(结构体)的空间大小读数据
for(i=1;i<=num;i++) //利用for循环创建链表,并把数据储存到其中
{
if(i==1) //第一个节点的创建
{
inew->next=head;
inew->last=NULL; //双向链表
iend=inew;
head=inew;
}
else
{
inew->next=NULL;
inew->last=iend;
iend->next=inew;
iend =inew;
}
inew=(STUDENT *)malloc(sizeof(STUDENT));
fread(inew,sizeof(Node),1,fp);
}
free(inew);//释放最后一个没有储存数据的节点
fclose(fp);//关闭文件
return num;
}
点击链接加入群聊【C/C++学习入门】:
/****************************输入函数*******************/
STUDENT *pinput()
{
char ch;
if(num==0)//判断是否是第一次录入
{
iend=inew=(STUDENT *)malloc(sizeof(STUDENT));//申请空间
inputone(inew); //录入信息
while(1)
{
num++;
if(num==1) //录入第一个学生信息时,第一个节点的指针指向
{
inew->next=NULL;
inew->last=NULL;
iend =inew;
head =inew;
}
else //在第一个节点的存在下,进行其他节点的录入
{
inew->next=NULL; //新建立节点next指向NULL
inew->last=iend; //新建立节点last指向上一个节点
iend->next=inew; //第一个next->下一个节点
iend =inew; //让iend指向最后一个节点
}
inew=(STUDENT *)malloc(sizeof(STUDENT));
printf("信息输入完毕,是否继续?(是-Y 否-N):");
scanf("\n%c",&ch);
if(ch=='N'||ch=='n') break;//判断是否跳出循环
inputone(inew);
}
free(inew); //释放未存储数据的节点
return head;
}
else//非第一次录入时
{
while(1)//进行循环输入,并进行判断,是否跳出循环
{
inew=(STUDENT *)malloc(sizeof(STUDENT));
getch();
inputone(inew);
num++;
inew->next=NULL; //新建立节点next指向NULL
inew->last=iend; //新建立节点last指向上一个节点
iend->next=inew; //第一个next->下一个节点
iend =inew; //让iend指向最后一个节点
printf("信息输入完毕,是否继续?(是-Y 否-N):");
scanf("\n%c",&ch);
if(ch=='N'||ch=='n')
break;
}
return head;
}
}
void inputone(STUDENT *temp)
{
printf("************************\n");
printf("请输入学生的姓名:");
scanf("%s",inew->information.mname);
printf("请输入学生的学号:");
scanf("%s",inew->information.schoolnum);
printf("请输入学生的性别(男-M 女-F):");
scanf("%s",inew->information.sex);
printf("请输入学生的年龄:");
scanf("%d",&inew->information.age);
printf("请输入学生的家庭住址:");
scanf("%s",inew->information.address);
printf("请输入学生的电话号码:");
scanf("%s",inew->information.phone);
}
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!学习裙【 玖四捌,玖伍四,四捌四 】
/****************************输出函数*******************/
void displayone(STUDENT *temp) //为简化程序- 单个输出函数,用于调用!
{
printf("**********************************\n");
printf("姓名:%s\n",temp->information.mname);
printf("学号:%s\n",temp->information.schoolnum);
printf("性别:%s\n",temp->information.sex);
printf("年龄:%d\n",temp->information.age);
printf("家庭住址:%s\n",temp->information.address);
printf("电话号码:%s\n",temp->information.phone);
printf("===========================\n");
}
/**************************以head为起始输出链表******************************/
void pdisplay()//核心思想:对链表进行操作,然后利用while循环输出
{
STUDENT *temp,*temp1;
int page=1,lastnum=num%PAGE,stu=0,i,page1;
char ch;
int choice;
if(head==NULL)//判断文件中是否有数据
{
printf("文件中没有数据!!\n");
getch();
return;
}
temp=head;
page1=num/PAGE+1;//进行页数的初始化
if(lastnum==0)//判断最后一页的数据数
{
lastnum=PAGE;
page1=page1-1;
}
while(1)//保留最后节点的指针
{
if(temp->next==NULL)
{
temp1=temp;
break;
}
temp=temp->next;
}
temp=head;
rewind(fp);
loop: printf("----------------------------第%d页-----------------------------\n",page);
while(temp!=NULL)//利用while 结构进行输出 知道到最后节点
{
displayone(temp);
temp=temp->next;
stu++;
if(stu==PAGE)//一页输出完后进行选择,对其链表进行操作
{
printf("4---首页 <--上一页--1 3--下一页--> 尾页---6 \n");
scanf("%d",&choice);
switch(choice)
{
case 1://上一页,清屏 ,对其链表进行操作
for(i=1;i<=PAGE+stu;i++)
{
temp=temp->last;
if(temp==head)
{
temp=head;
page=1;
break;
}
}
if(temp!=head)
page--;
stu=0;
system("cls");
goto loop;
break;
case 4://第一页,清屏 ,把head值赋给temp
system("cls");
temp=head;
stu=0;
page=1;
goto loop;
break;
case 6://最后一页,清屏 ,对链表进行操作,找到相应链表值赋给temp
system("cls");
temp=temp1;
for(i=1;i<=lastnum-1;i++)
{
temp=temp->last;
if(temp==head)
{
temp=head;
page=1;
break;
}
}
if(temp!=head)
page=page1;
goto loop;
break;
case 3://下一页,清屏 继续输出,
system("cls");
stu=0;
page++;
goto loop;
break;
}
stu=0;
}
}
if(temp==NULL)
{
printf("\n-------------已到尾页,是否返回首页?(是-Y 否-N):---------------");
scanf("\n%c",&ch);
if(toupper(ch)=='Y')
{
temp= head;
page=1;
stu=0;
system("cls");
goto loop;
}
}
getch();
}
/***************************加上提示语句*以head为起始输出链表**********************************/
void pdisplay_sort()
{ //提示语句,表示已经进行排序,然后调用输出函数
printf("\n信息已经进行了排序,排序后信息如下:\n");
pdisplay();
}
关于怎么快速学C/C++编程,有什么方法,这个问题,想必大家都已经心中有数了,打算深入了解这个行业的朋友,可以加下小编的C/C++编程学习群:948954484不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的C/C++资料和0基础入门教程,欢迎初学和进阶中的小伙伴。