我是靠谱客的博主 虚拟哈密瓜,最近开发中收集的这篇文章主要介绍求助,本人新手第一次写系统,这是我写的添加功能,在vs2017里运行不了,感觉没什么问题,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
enum studentcategory { UNDERGRADUATE,POSTGRADUATE };
typedef struct node{
int
id;
//学号:主键,唯一
char name[10];
//姓名
char sex[3];
//性别:男或女
char specialty[20];
//专业
char classes[20];
//班级:唯一,不同班级不同
enum studentcategory category; //枚举型学生类别;本科生、研究生
int
math;
//高数
int
english;
//英语
int
clanguage;
//C语言
int
comprehensive;
//课程综合
int
thesis;
//毕业论文
int
totalscore;
//总成绩
int
classrank;
//班级排名
int
schoolrank;
//校级排名
struct node * next;
}Student;
Student *AddStudent(Student *head);/*添加学生基本信息*/
Student *AddUnderraduateScore(Student *p);/*添加本科生成绩信息*/
Student *AddPostgraduateScore(Student *p);/*添加研究生成绩信息*/
Student *AddNode(Student *head,Student *p);/*形成链表*/
Student *ReadFromFile(Student *head);/*从文件中读取学生数据到链表*/
void SaveToFile(Student *head);/*将学生链表结点数据写入到文件*/
void print(Student *head);
int main()
{
Student *head=NULL;
head=NULL;
head=ReadFromFile(head);
print(head);
}
/*添加学生基本信息*/
Student *AddStudent(Student *head)
{
Student *p=head;
int i,n,category;
printf("请选择你要输入的学生的人数:n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d位学生信息n",i+1);
if((p=(Student *)malloc(sizeof(Student)))==NULL)
{/*申请内存块,输入学生信息*/
printf("无法成功分配内存块n");
exit(0);
}
p->next=NULL;
{/*输入学生基本信息*/
printf("请输入学生学号:n");
scanf("%d",&p->id);
getchar();
printf("请输入学生名字:n");
scanf("%s",p->name);
printf("请输入学生性别:n");
scanf("%s",p->sex);
printf("请输入学生专业名称:n");
scanf("%s",p->specialty);
printf("请输入学生班别:n");
scanf("%s",p->classes);
while(1)
{
printf("请输入学生类型(本科生:0,研究生:1):");
scanf("%d",&category);
if(category!=1&&category!=0){
printf("输入有误,只能输入0或1,请重新输入:");
}
else
{
p->category=(enum studentcategory)category;
break;
}
}
}
{/*将学生所有未输入信息初始化为-1,提示未输入*/
p->math=-1;
p->english=-1;
p->clanguage=-1;
p->totalscore=-1;
p->comprehensive=-1;
p->thesis=-1;
p->totalscore=-1;
p->classrank=-1;
p->schoolrank=-1;
}
if(p->category==UNDERGRADUATE)
{
p=AddUnderraduateScore(p);
}
else if(p->category==POSTGRADUATE)
{
p=AddPostgraduateScore(p);
}
head=AddNode(head,p);/*调用链表功能函数,生成链表*/
}
return head;
}
/*添加本科生成绩信息*/
Student *AddUnderraduateScore(Student *p)
{
Student *q=p;
printf("请输入该生高数,英语,C语言成绩:");
scanf("%d%d%d",&q->math,&q->english,&q->clanguage);
if(q->math!=-1&&q->english!=-1&&q->clanguage!=-1)
{
q->totalscore=q->math+q->english+q->clanguage;
}
return q;
}
/*添加研究生成绩信息*/
Student *AddPostgraduateScore(Student *p)
{
Student *q=p;
printf("请输入该生课程设计,论文成绩:");
scanf("%d%d",&q->comprehensive,&q->thesis);
if(q->comprehensive!=-1&&q->thesis!=-1)
{
q->totalscore=q->comprehensive+q->thesis;
}
return q;
}
/*形成链表*/
Student *AddNode(Student *head,Student *p)
{
Student *q=head;
/*如果链表为空,则以该节点p为头结点*/
if(q==NULL)
{
head=p;
p->next=NULL;
}
/*如果链表不为空,则将节点p添加到链表后面*/
else
{
while(q->next!=NULL)
{
q=q->next;
}
q->next=p;
p->next=NULL;
}
return head;
}
/*打印学生信息*/
void print(Student *head)
{
Student *p=head;
while(p!=NULL)
{
if(p->category==UNDERGRADUATE)
{
printf("学号
姓名
性别
专业
班级
学生类型
高数成绩
英语成绩
C语言成绩
总成绩n");
printf("%2d%8s%5s%13s%4s
本科生
%6d%10d%10d%10dn",p->id,p->name,p->sex,p->specialty,p->classes,p->math,p->english,p->clanguage,p->totalscore);
}
else if(p->category==POSTGRADUATE)
{
printf("学号
姓名
性别
专业
班级
学生类型
课程设计成绩
论文成绩
总成绩n");
printf("%2d%8s%5s%13s%4s
研究生
%8d%12d%10dn",p->id,p->name,p->sex,p->specialty,p->classes,p->comprehensive,p->thesis,p->totalscore);
}
p=p->next;
}
}
/*从文件中读取学生数据到链表*/
Student *ReadFromFile(Student *head)
{
FILE *fp;
Student *Temp;/*接收从文件中读取到的学生的信息*/
int StudentNumber=0;/*记录读取学生的人数*/
if((fp=fopen("StudentData.txt","r"))==NULL)
{
printf("无法打开文件n");
exit(0);
}
rewind(fp);
printf("开始读取学生数据...n");
while(1)
{
Temp=(Student *)malloc(sizeof(Student));
if(fread(Temp,sizeof(Student),1,fp)==1)
{
StudentNumber++;
Temp->next=NULL;
head=AddNode(head,Temp);
}
else
{
if(feof(fp))
{
printf("学生数据读取结束,共有%d名学生数据被读取n",StudentNumber);
break;
}
}
}
return head;
if(fclose(fp))
{
printf("文件关闭失败n");
exit(0);
}
}
/*将学生链表结点数据写入到文件*/
void SaveToFile(Student *head)
{
FILE *fp;
Student *p=head;
int StudentNumber=0;
if((fp=fopen("StudentData.txt","w+"))==NULL)
{
printf("无法打开文件n");
exit(0);
}
printf("学生数据正在保存...n");
while(p!=NULL)
{
if(fwrite(p,sizeof(Student),1,fp)==1)
{
StudentNumber++;
}
else
{
printf("学号:%d,姓名:%s的学生数据保存失败n",p->id,p->name);
}
p=p->next;
}
printf("共有%d名学生数据被保存n",StudentNumber);
if(fclose(fp))
{
printf("文件关闭失败n");
exit(0);
}
}
最后
以上就是虚拟哈密瓜为你收集整理的求助,本人新手第一次写系统,这是我写的添加功能,在vs2017里运行不了,感觉没什么问题的全部内容,希望文章能够帮你解决求助,本人新手第一次写系统,这是我写的添加功能,在vs2017里运行不了,感觉没什么问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复