⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3.cpp

📁 这是我自己所做的学年论文
💻 CPP
字号:
/*主控菜单处理测试程序*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct {     //通讯录结点类型
 char num[5];        //学号
char name[9];     //姓名
char sex[3];     //性别
float math;    //数学
float English;    //英语
float chinese;     //语文
float computer;    //计算机
float sum;   //总分
float average;
}datatype;
typedef struct node {  //结点类型定义
datatype data;    //结点数据定义
struct node * next;    //结点指针域
}listnode;
typedef listnode * linklist;
linklist head;
listnode *p;  
//函数说明
int menu_select();
linklist createlist(void);
linklist loaddata(void);
listnode *savedata(linklist head);
void insertnode(linklist head,listnode *p);
listnode * listfind(linklist head);
void delnode(linklist head);
void printlist(linklist head);
//主函数
void main()
{printf("                        =====制作人:刘莎(06410901048)========\n");
for( ; ; ){
switch (menu_select())
 {
   case 1:
    printf("****************************************\n");
    printf("*  学 生 成 绩 管 理 系 统 的 建 立  *\n");
    

printf("*****************************************\n");
    head=createlist();
    break;
   case 2: 
     

printf(" *********************************\n");
printf("   *  学 生 信  息 的 添 加  *\n");
     

printf("**********************************\n");
 p=(listnode *)malloc(sizeof(listnode));   //申请新结点
 printf("学号:");
scanf("%s",p->data.num);
printf("姓名:");
scanf("%s",p->data.name);
printf("性别:");
scanf("%s",p->data.sex);
printf("数学:");
scanf("%f",&p->data.math);
printf("英语:");
scanf("%f",&p->data.English);
printf("语文:");
scanf("%f",&p->data.chinese);
printf("计算机:");
scanf("%f",&p->data.computer);
 p->data.sum=p->data.math+p->data.English+p->data.chinese+p->data.computer;
printf("总分:%f\n",p->data.sum);
p->data.average= p->data.sum/4;
printf("平均分:%f\n",p->data.average);   
 insertnode(head,p);
    break;
   case 3:
     

printf(" *****************************\n");
printf("   *  学 生 信 息 的 查 询 *\n");
      

printf("*****************************\n");
     p=listfind(head);
    if(p!=NULL) {
    printf(" 学号 姓 名 性别  数学    英语     语文   计算机    总分      平均分  \n");
      printf("-----------------------------------------------------------------------------------\n");
     printf("%s,%s,%s,%f,%f,%f,%f,%f,%f\n",p->data.num,p->data.name,
		 
p->data.sex,p->data.math,p->data.English,p->data.chinese,p->data.computer,p->data.sum,p->data.average);
      

printf("----------------------------------------------------------------------------------------\n");
	}
   else
  printf("没有查到要查询的学生\n");
  break;
  case 4:
 printf("*****************************\n");
 printf("  * 学 生 信 息 的 删 除  *\n");
 printf("*****************************\n");
  delnode(head);
  break;
 case 5:
 printf("                   ******************************\n");
printf("                       *学 生 信 息 的 输 出 *\n");
 printf("                   ******************************\n");
printlist(head);
break;
 case 6:
printf("    *数 据 保 存 中 ...*\n");
head=savedata(head);
 break;
 case 7:
printf("   * 数 据 读 取 中 ...*\n");
head=loaddata();
break;
case 0:
printf("\t 再见\n");
return;} 
}
}
 

/*菜单选择函数程序*/
int menu_select()
{
int sn;
printf("                         ----------------------------------\n");
printf("                              *       欢迎进入     *\n");
printf("                             *   学生成绩管理系统   *\n");
printf("                         ----------------------------------\n");
printf("                          *     1.学生成绩的建立       *       \n");
printf("                          *     2.学生信息的添加       *      \n");
printf("                          *     3.学生成绩的查询       *      \n");
printf("                          *     4.学生信息的删除       *      \n");
printf("                          *     5.学生信息的输出       *      \n");
printf("                          *     6.学生数据的保存       *      \n");
printf("                          *     7.学生数据的读取       *      \n");
printf("                          *     0.退出管理系统         *     \n");
printf("                         ==================================\n");

printf("      请选择0-7: ");
for( ; ; )
{
scanf("%d",&sn);
if(sn<0 || sn>7)
printf("\n\t 输出错误,重选 0-7:");
else
break;
}
return sn;
}

/*用尾插法建立学生链表函数*/

linklist createlist(void)
{//尾插法建立带头结点的学生链表算法
linklist head=(listnode *)malloc(sizeof(listnode));   //申请头结点
listnode *p,*rear;
int flag=0;    //结束标志置0
rear=head;     //尾指针初始指向头结点
while(flag==0)
{ p=(listnode *)malloc(sizeof(listnode));  //申请新结点
printf("学号:");
scanf("%s",p->data.num);
printf("姓名:");
scanf("%s",p->data.name);
printf("性别:");
scanf("%s",p->data.sex);
printf("数学:");
scanf("%f",&p->data.math);
printf("英语:");
scanf("%f",&p->data.English);
printf("语文:");
scanf("%f",&p->data.chinese);
printf("计算机:");
scanf("%f",&p->data.computer);
 p->data.sum=p->data.math+p->data.English+p->data.chinese+p->data.computer;
printf("总分:%f\n",p->data.sum);
p->data.average= p->data.sum/4;
printf("平均分:%f\n",p->data.average);
rear->next=p;    //新结点连接到尾结点之后
  rear=p;   //尾结点指向新结点
  
  printf("结束建表吗?(1/0):");
  scanf("%d",&flag);   //读入一个标志数据
}  
rear->next=NULL;   //终端结点指针域置空
return head;  //返回链表头指针
}

void insertnode(linklist head,listnode *p)
{
listnode *p1,*p2;
p1=head;
p2=p1->next;

while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0)
{
p1=p2;    //p1指向刚访问过的结点
p2=p2->next;   //p2指向表的下一个结点
}
p1->next=p;   //插入p所指向的结点
p->next=p2;   
}


listnode * listfind(linklist head)
{   //有序链表上的查找
listnode *p;
char num[5];
char name[9];
int xz;
printf("==========================\n");
printf("1.按学号查询\n");
printf("2.按姓名查询\n");
printf("==========================\n");
printf("请选择 :\n");
p=head->next;    //假定带头结点
scanf("%d",&xz);
if(xz==1){
printf("请输入要查找的学号:");
scanf("%s",num);
while(p && strcmp(p->data.num,num)<0)
   p=p->next;
if(p==NULL || strcmp(p->data.num,num)>0)
p=NULL;   //没有查到要查找的学生信息
}
else 
if(xz==2){
printf("请输入要查找的姓名:"); 
scanf("%s",name);
while(p && strcmp(p->data.name,name)!=0)
p=p->next;
}
return p;
}

/*学生信息的删除*/
void delnode(linklist head)
{
char jx;
listnode *p,*q;
p=listfind(head);   //调用查找函数
if(p==NULL){
printf("没有查到要删除的学生!\n");
return;
}
printf("真的要删除吗?(y/n) : ");
scanf("%s",&jx);
if(jx=='y' || jx=='Y') {
q=head;
while(q!=NULL && q->next!=p)
q=q->next;
q->next=p->next;   //删除结点
free(p);    //释放被删除的结点空间
printf("学生信息已被删除 \n");   
}
}

/*学生信息的输出*/
void printlist(linklist head)
{
listnode *p;
p=head->next;   //因为链表带头结点,使p指向链表开始结点
printf("学号    姓 名    性别    数学   英语   语文  计算机    总分    平均分 \n");
printf("----------------------------------------------------------------------\n");
while(p!=NULL)
{
printf("%s,%s,%s,%f,%f,%f,%f,%f,%f\n",p->data.num,p->data.name,

p->data.sex,p->data.math,p->data.English,p->data.chinese,

p->data.computer,p->data.sum,p->data.average);
printf("---------------------------------------------------------------------\n");   
p=p->next;
}
}

/*****************************/
/*         读取纪录          */
/*****************************/
linklist loaddata(void)
{
    FILE *fp;
	int count=0;
	listnode *p,*rear;
    linklist head=(listnode *)malloc(sizeof(listnode));/* 申请结点 */
    int flag=0;   /* 结束标志置0*/
    if((fp=fopen("D:\\student.txt","r"))==NULL)
	{
		printf("\t数据读取失败!!\n\n");
		return NULL;
	}
	rear=head;
	p=(listnode *)malloc(sizeof(listnode));
	p->next=NULL;
	while(fscanf(fp,"%s,%s,%s,%f,%f,%f,%f,%f,%f\n",p->data.num,p->data.name,

p->data.sex,p->data.math,p->data.English,p->data.chinese,

p->data.computer,p->data.sum,p->data.average)!=EOF)
	{
		rear->next=p;rear=rear->next;flag=1;count++;
        p=(listnode *)malloc(sizeof(listnode));
		p->next=NULL;
	}
	fclose(fp);
	printf("共读取 %d 条数据纪录\n\n",count);	
	if(flag==1) return head;	
}

/********************************/
/*           保存纪录           */
/********************************/

listnode *savedata(linklist head)
{
   FILE *fp;
   listnode *p;   
   int flag=0;
   int count=0;
   p=head->next;   
  if((fp=fopen("D:\\student.txt","wb"))==NULL)
	{
		printf("\t文件打开失败!!\n\n");
		return NULL;
	}
   while(p!=NULL)
	{
	   fprintf(fp,"%s\n%s\n%s\n%f\n%f\n%f\n%f\n%f\n%f\n",p->data.num,p->data.name,

p->data.sex,p->data.math,p->data.English,p->data.chinese,

p->data.computer,p->data.sum,p->data.average);

	   p=p->next; count++;	   
	}
	fclose(fp);
	if(flag==1) return head;
printf("\t共存入 %d 条数据纪录\n\n",count);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -