今天给各位分享学生信息的输入输出的知识,其中也会对学生信息输入输出编程c语言进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
哥们,我给你个链表头文件吧,这些东西还是得自己学学的,这个VC2010编译无错的,希望你仔细研究研究,然后稍微的修改就可以完成你的需求了,我这个就相当于帮你解决查错和写代码的时间了,学语言还是得细心看看的,至少了解下大思路~~~加油
/* 本头文件为一个单链表模板,包括各种操作函数以及链表单元数据的修改建立,
链表数据的编辑在Elemtype结构体中,现在仅含测试成员,使用时个别操作函数需要加以修改。*/
#pragma once
#include stdlib.h
#include iostream
typedef struct Elemtype
{
//在此编辑链表数据成员
int a ;
}Elemtype;
typedef struct LinkList
{
int number;
Elemtype elem;
static long Length ;
struct LinkList *next;
}LinkList;
long LinkList::Length = 0;
//操作函数声明
LinkList* InitList(LinkList L, long InitLength); //链表的建立以及初始化
int DestroyList(LinkList *L ); //销毁链表
int ListEmpty(LinkList L ); //检验链表是否为空
long ListLength(LinkList L ); //输出链表的长度
int ListDisplay(LinkList L ); //显示链表
LinkList* ListSearch(LinkList L, int num); //查询
void ListInsert(LinkList L, int k, LinkList* newl);//插入第k个元素之前插入
void ListDelete(LinkList L, int num); //删除
void ListReverse(LinkList L ); //链表的逆置
//函数定义
LinkList* InitList(LinkList L, long InitLength)
{
LinkList* head = L, *p, *str = head;
str = (LinkList*)malloc(sizeof(LinkList));
head = str;
p = str;
for(int i = 1; i = InitLength; i++)
{
str = (LinkList*)malloc(sizeof(LinkList));
p - next = str;
p = str;
p - number = i;
p - elem.a = i;
}
head - Length = InitLength;
p - next = NULL;
return head;
}
int DestroyList(LinkList *L )
{
LinkList *p1 =L, *p2 = p1;
while(p1 -next)
{
p2 = p1 -next;
free(p1);
p1 = p2;
}
free(p1);
return 1;
}
int ListEmpty(LinkList L)
{
if(L.next == NULL)
{ return 1; }
else
return -1;
}
long ListLength(LinkList L)
{ return L.Length; }
int ListDisplay(LinkList L)
{
LinkList* p = L;
int i = 1;
while(p - next != NULL)
{
printf("Number %d is:", i++);
printf("%d\n", p - next - number);
p = p - next;
}
return 1;
}
LinkList* ListSearch( LinkList L, int num)
{
LinkList * p = L;
while(p - next != NULL)
{
if(p - number == num)
{ printf("成功查找\n");return p; }
else
p = p - next;
}
printf("查找失败\n");
return NULL;
}
void ListInsert(LinkList L, int k, LinkList* newl)
{
LinkList *p = L;
for(int i = 1; i k; i++)
{ p = p - next; }
newl - next = p - next;
p - next = newl;
p - Length += 1;
printf("插入成功\n");
}
void ListDelete(LinkList L, int num)
{
LinkList *head = L, *p = head, *q;
while( p - next != NULL)
{
if( p - next - number == num )
{
q = p - next;
p - next = p - next - next;
free(q);
printf("成功删除:\n");
}
else
p = p - next;
}
}
void ListReverse(LinkList L) //两种成功的逆置方法
{
LinkList *p = L, *q;
q = p -next;
p = q -next-next;
q -next -next = q;
q -next = NULL;
q = p;
while(p)
{
p = p-next;
q -next = L.next;
L.next = p;
p = p-next;
L.next-next = q;
q = p;
}
/*LinkList *p = L.next,*s;
L.next= NULL;
while(p)
{
s = p- next;
p- next=L.next;
L.next=p;
p=s;
}
*/
}
//测试头文件的主函数
#include "LinkList.h"
int main()
{
/*检验代码
LinkList head, *p, *p1, *p2;
LinkList *newl =(LinkList*)malloc(sizeof(LinkList));
newl-number = 99;
newl-elem.a = 99;
p = InitList(head, 10); //创建并初始化列表序号
head = *p;
if (ListEmpty(head)==1) //ListEmpty函数的检验
printf("链表为空\n");
else printf("链表不为空\n");
printf("%d\n",ListLength(head)); //ListLength函数的检验
if (ListDisplay(head)==1) //ListDisplay函数的检验
printf("输出成功\n");
else printf("输出失败\n");
;
p1 = ListSearch(head, 5); //ListSearch函数的检验
printf("所得指针指向LinkList-number = %d\n", p1-number);
ListInsert(head, 5,newl); //ListInsert函数的检验
p2 = ListSearch(head, 99);
ListDelete(head, 99); //ListDelete函数的检验
p2 = ListSearch(head, 99);
printf("逆置前:\n"); //ListReverse函数的检验
printf("head指向的第一个元素的序号为%d,地址为%0x\n ",p-next-number,head.next);
ListReverse(head);
printf("逆置后:\nhead指向的第一个元素的序号为%d,地址为%0x\n ",head.next-number,head.next);
if (DestroyList(p)==1)//DestroyList函数的检验
printf("链表销毁成功\n");
*/
return 0;
}
#includestdio.h
struct{
int num;
char name[10];
int s1,s2,s3,s4,s5;
}student[1000];
int main()
{
int number,i;
printf("请输入学生总人数:");
scanf("%d",number);
for(i=0;inumber;i++){
printf("请输入第%d名学生的信息\n",i+1);
printf("学号:");
scanf("%d",student[i].num);
printf("姓名:");
scanf("%s",student[i].name);
printf("成绩一:");
scanf("%d",student[i].s1);
printf("成绩二:");
scanf("%d",student[i].s2);
printf("成绩三:");
scanf("%d",student[i].s3);
printf("成绩四:");
scanf("%d",student[i].s4);
printf("成绩五:");
scanf("%d",student[i].s5);
}
printf("学生信息如下:\n");
for(i=0;inumber;i++){
printf("学号:%3d",student[i].num);
printf("姓名:%3s",student[i].name);
printf("成绩一:%3d",student[i].s1);
printf("成绩二:%3d",student[i].s2);
printf("成绩三:%3d",student[i].s3);
printf("成绩四:%3d",student[i].s4);
printf("成绩五:%3d\n",student[i].s5);
}
return 0;
}
正规的写法,创建Student类,要有构造方法,重写toString方法,这个可以改为你需要的格式
public class Student {
private String number;
private String name;
private char sex;
private double[] score=new double[3];
private double ave;
private double sum;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public double[] getScore() {
return score;
}
public void setScore(double[] score) {
this.score = score;
}
public double getAve() {
return ave;
}
public void setAve(double ave) {
this.ave = ave;
}
public double getSum() {
return sum;
}
public void setSum(double sum) {
this.sum = sum;
}
@Override
public String toString() {
return "Student [number=" + number + ", name=" + name + ", sex=" + sex
+ ", score=" + Arrays.toString(score) + ", ave=" + ave
+ ", sum=" + sum + "]";
}
public Student() {
}
public Student(String number, String name, char sex, double[] score,
double ave, double sum) {
super();
this.number = number;
this.name = name;
this.sex = sex;
this.score = score;
this.ave = ave;
this.sum = sum;
}
然后你另外写一个类,里面有input 和 output方法来操作你的这个学生类。
#includestdio.h
void main()
{
struct
{
char name[10];
int num;
char sex[2];
int age;
}s[10];
int i;
for(i=0;i10;i++)
{
printf("请依次输入学生的姓名,学号,性别,年龄等信息");
scanf("%s%d%s%d",s[i].name,s[i].num,s[i].sex,s[i].age);
}
for(i=0;i10;i++)
{
printf("姓名:%s\t学号:%d\t性别:%s\t年龄:%d\n",s[i].name,s[i].num,s[i].sex,s[i].age);
}
}
扩展资料:
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。定义与声明
结构体的定义如下,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
作用:
1,结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成你想要的数据类型。以方便日后的使用。
2,在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
3,结构体在函数中的作用不是简便,其最主要的作用就是封装。
参考资料来源:百度百科-结构体
#include iostream
#include string.h
#include ctime
#include conio.h
using namespace std;
struct student //定义学生类
{
int num; //学号
char name[8]; //姓名
char classes[20]; //班别
int math,english,computer,sum; //数学,英语,计算机,平均总成绩
};
int s=0; //全局变量
class student1
{
private:
student stu[40]; //结构体变量
char name, classes;
int num;
int math,english,computer,sum;
public:
void input(int, char *, char *, int, int, int);
void output(int);
int check(int stu_num)
{
int m=0;
while(m=s+1)
if(stu_num==stu[m++].num)
{
return 1;
break;
}
if(ms+1)
return 0;
else
return 1;
}
void search(int);
void search1(int);
void deleted(int);
void deleted1(int);
void desc(int);
void desc1(int);
void desc2(int);
};
void student1::input(int stu_num,char *stu_name, char *stu_classes, int stu_math, int stu_english, int stu_computer) //输入模块
{
stu[s].num=stu_num;
strcpy(stu[s].name, stu_name);
strcpy(stu[s].classes, stu_classes);
stu[s].math=stu_math;
stu[s].english=stu_english;
stu[s].computer=stu_computer;
}
void student1::output(int s) //输出模块
{
cout s "\t";
cout stu[s].num "\t";
cout stu[s].name "\t";
cout stu[s].classes "\t";
cout stu[s].math "\t\t";
cout stu[s].english "\t\t";
cout stu[s].computer "\t\n";
}
void student1::search(int s) //查找模块
{
int stu_num,p;
while (s==0)
{
cout "没有记录,请先输入记录!" endl;
break;
}
if (s!=0)
{
cout "请输入你要查找的学号:";
cin stu_num;
while (stu_num100000 || stu_num999999) //判断学号是否正确
{
cin.clear();
rewind(stdin);
cout "你输入的学号不正确,请输入一个六位数的学号" endl;
cin stu_num;
}
while (s!=0) //查找是否有符合条件的记录
{
p=1;
if (stu_num==stu[s].num)
{
cout "学号\t姓名\t班级\t数学成绩\t英语成绩\t计算机成绩\t" endl;
cout stu[s].num "\t";
cout stu[s].name "\t";
cout stu[s].classes "\t";
cout stu[s].math "\t\t";
cout stu[s].english "\t\t";
cout stu[s].computer "\t\n";
getch();
break;
}
else
p=0;
s--;
}
if (p==0)
cout "没有找到你要查找的记录!" endl;
}
getch();
}
void student1::search1(int s) //按姓名查找模块
{
char stu_name[8],p;
while (s==0)
{
cout "没有记录,请先输入记录!" endl;
break;
}
if (s!=0)
{
cout "请输入你要查找的姓名:";
cin stu_name;
while (s!=0) //查找是否有符合条件的记录
{
p=1;
if (strcmp(stu_name, stu[s].name)==0)
{
cout "学号\t姓名\t班级\t数学成绩\t英语成绩\t计算机成绩\t" endl;
cout stu[s].num "\t";
cout stu[s].name "\t";
cout stu[s].classes "\t";
cout stu[s].math "\t\t";
cout stu[s].english "\t\t";
cout stu[s].computer "\t\n";
getch();
break;
}
else
p=0;
s--;
}
if (p==0)
cout "没有找到你要查找的记录!" endl;
}
getch();
}
void student1::deleted(int n) //删除模块
{
int stu_num,p;
char yes;
while (s==0)
{
cout "没有记录,请先输入记录!" endl;
break;
}
if (s!=0)
{
cout "请输入要删除的学号:";
cin stu_num;
while (stu_num100000 || stu_num999999)
{
cin.clear();
rewind(stdin);
cout "你输入的学号不正确,请输入一个六位数的学号" endl;
cout "学号:";
cin stu_num;
}
for (int i=1;i=n;i++)
{
if (stu[i].num!=stu_num)
p=0;
if (stu[i].num==stu_num)
{
cout "学号\t姓名\t班级\t数学成绩\t英语成绩\t计算机成绩\t" endl;
cout stu[i].num "\t";
cout stu[i].name "\t";
cout stu[i].classes "\t";
cout stu[i].math "\t\t";
cout stu[i].english "\t\t";
cout stu[i].computer endl;
cout "你确定要删除此学生记录吗?(y/n)";
cin yes;
if (yes == 'y' || yes == 'Y')
{
for (int j=1; j=n-1; j++) //删除记录
{
stu[j].num=stu[j+1].num;
strcpy(stu[j].name, stu[j+1].name);
strcpy(stu[j].classes, stu[j+1].classes);
stu[j].math=stu[j+1].math;
stu[j].english=stu[j+1].english;
stu[j].computer=stu[j+1].computer;
}
cout "学生记录删除成功" endl;
s=s-1;
p=1;
break;
}
else
{
cout "学生记录删除失败" endl;
p=1;
}
}
}
if (p==0)
cout "没有找到你要查找的记录!" endl;
}
getch();
}
void student1::deleted1(int n) //按姓名删除模块
{
char stu_name[8],p;
char yes;
while (s==0)
{
cout "没有记录,请先输入记录!" endl;
break;
}
if (s!=0)
{
cout "请输入要删除的姓名:";
cin stu_name;
for (int i=1;i=n;i++)
{
if (strcmp(stu[i].name, stu_name)0 || strcmp(stu[i].name, stu_name)0)
p=0;
if (strcmp(stu[i].name, stu_name)==0)
{
cout "学号\t姓名\t班级\t数学成绩\t英语成绩\t计算机成绩\t" endl;
cout stu[i].num "\t";
cout stu[i].name "\t";
cout stu[i].classes "\t";
cout stu[i].math "\t\t";
cout stu[i].english "\t\t";
cout stu[i].computer endl;
cout "你确定要删除此学生记录吗?(y/n)";
cin yes;
if (yes == 'y' || yes == 'Y')
{
for (int j=1; j=n-1; j++) //删除记录
{
stu[j].num=stu[j+1].num;
strcpy(stu[j].name, stu[j+1].name);
strcpy(stu[j].classes, stu[j+1].classes);
stu[j].math=stu[j+1].math;
stu[j].english=stu[j+1].english;
stu[j].computer=stu[j+1].computer;
}
cout "学生记录删除成功" endl;
s=s-1;
p=1;
break;
}
else
{
cout "学生记录删除失败" endl;
p=1;
}
}
}
if (p==0)
cout "没有找到你要查找的记录!" endl;
}
getch();
}
void student1::desc1(int s) //按学号排序
{
int temp;
int sum[40];
while (s==0)
{
cout "没有记录,请先输入记录!" endl;
break;
}
if (s!=0)
{
cout "学号\t姓名\t班级\t数学成绩\t英语成绩\t计算机成绩\t" endl;
for (int k=1;k=s;k++)
sum[k]=stu[k].num;
for (int i=1;i=s;i++) //利用冒泡法对sum[]进行排序
for (int j=1;j=s-i;j++)
if (sum[j]sum[j+1])
{
temp=sum[j];
sum[j]=sum[j+1];
sum[j+1]=temp;
}
for (int x=1;x=s;x++) //输出与sum[]中相同总分所对应的内容
for (int y=1;y=s;y++)
if (sum[x]==stu[y].num)
{
cout stu[y].num "\t";
cout stu[y].name "\t";
cout stu[y].classes "\t";
cout stu[y].math "\t\t";
cout stu[y].english "\t\t";
cout stu[y].computer "\t\t";
cout endl;
}
}
getch();
}
void student1::desc2(int s) //按姓名排序
{
char sum[40][8];
char temp[8];
while (s==0)
{
cout "没有记录,请先输入记录!" endl;
break;
}
if (s!=0)
{
cout "学号\t姓名\t班级\t数学成绩\t英语成绩\t计算机成绩\t" endl;
for (int k=1;k=s;k++)
strcpy(sum[k], stu[k].name);
for (int i=1;i=s;i++) //利用冒泡法对sum[]进行排序
for (int j=1;j=s-i;j++)
if (strcmp(sum[j], sum[j+1])0)
{
strcpy(temp, sum[j]);
strcpy(sum[j], sum[j+1]);
strcpy(sum[j+1], temp);
}
for (int x=1;x=s;x++) //输出与sum[]中相同总分所对应的内容
for (int y=1;y=s;y++)
if (strcmp(sum[x], stu[y].name)==0)
{
cout stu[y].num "\t";
cout stu[y].name "\t";
cout stu[y].classes "\t";
cout stu[y].math "\t\t";
cout stu[y].english "\t\t";
cout stu[y].computer "\t\t";
cout endl;
}
}
getch();
}
void student1::desc(int s) //平均成绩排序模块
{
int temp;
int sum[40];
while (s==0)
{
cout "没有记录,请先输入记录!" endl;
break;
}
if (s!=0)
{
cout "学号\t姓名\t班级\t数学成绩\t英语成绩\t计算机成绩\t平均成绩" endl;
for (int k=1;k=s;k++)
{
sum[k]=(stu[k].math+stu[k].english+stu[k].computer)/3; //平均成绩
stu[k].sum=(stu[k].math+stu[k].english+stu[k].computer)/3;
}
for (int i=1;i=s;i++) //利用冒泡法对sum[]进行排序
for (int j=1;j=s-i;j++)
if (sum[j]sum[j+1])
{
temp=sum[j];
sum[j]=sum[j+1];
sum[j+1]=temp;
}
for (int x=1;x=s;x++) //输出与sum[]中相同总分所对应的内容
for (int y=1;y=s;y++)
if (sum[x]==stu[y].sum)
{
cout stu[y].num "\t";
cout stu[y].name "\t";
cout stu[y].classes "\t";
cout stu[y].math "\t\t";
cout stu[y].english "\t\t";
cout stu[y].computer "\t\t";
cout stu[y].sum endl;
}
}
getch();
}
int main(int argc, char *argv[])
{
student1 st;
char yes,choice;
char *name,*classes;
int math, english, computer, num;
time_t t;
time(t);
while (1)
{
system("cls");
cout "\t--------------------------学生成绩管理系统--------------------------"endl;
cout" yuzhu8912@163.com "endl;
cout"--------------------------------------------------------------------------------\n"
" 1.增加学生成绩记录\n"
" 2.显示学生成绩记录\n"
" 3.查询学生成绩记录——按学号\n"
" 4.查询学生成绩记录——按姓名\n"
" 5.删除学生成绩记录——按学号\n"
" 6.删除学生成绩记录——按姓名\n"
" 7.排序学生成绩记录——按学号\n"
" 8.排序学生成绩记录——按姓名\n"
" 9.排序学生成绩记录——按平均成绩\n"
" 0.退出学生成绩管理系统\n"
"--------------------------------------------------------------------------------\n";
cout"提示:按0-6进行选择您要的服务";
cin choice;
t:
if (choice=='0')
break;
switch(choice)
{
case '1':
{
last:
cout "请依次输入学生的学号,姓名,班级,数学成绩,英语成绩,计算机成绩——学号为6位数字"endl;
name = new char[];
classes =new char[];
cin num name classes math english computer;
while (num10000 || num999999)
{
cin.clear();
rewind(stdin);
cout "学号必须为6位数字,请重新输入学生信息" endl;
cin num name classes math english computer;
}
while (st.check(num)) //调用CHECK模块判断学号是否重复
{
cin.clear();
cout "学号重复,请重输入!" endl;
cout "学号:";
cin num;
}
s=s+1;
st.input(num,name,classes,math,english,computer);
cout "是否要继续输入?(y/n)";
cin yes;
while (yes == 'y' || yes == 'Y')
{
goto last;
}
getch();
};break;
case '2':
{
if (s==0) //判断是否有记录输入
{
cout "没有学生记录,请先输入记录!" endl;
getch();
break;
}
if (s!=0)
{
cout "序号" "\t";
cout "学号" "\t";
cout "姓名" "\t";
cout "班级" "\t";
cout "数学成绩" "\t";
cout "英语成绩" "\t";
cout "计算机成绩" "\t";
for (int i=1;i=s;i++)
st.output(i);
getch();
}
};break;
case '3':st.search(s);break;
case '4':st.search1(s);break;
case '5':st.deleted(s);break;
case '6':st.deleted1(s);break;
case '7':st.desc1(s);break;
case '8':st.desc2(s);break;
case '9':st.desc(s);break;
default:
{
while (choice=='0'||choice'6')
{
cout "错误选项, 请重新选择!" endl;
cin choice;
}
goto t;
}break;
}
}
cout "谢谢您的使用!" endl;
return 0;
}
#include stdio.h
#include string.h
#include stdlib.h
int main(void)
{
printf("输入学生的信息,分别是班级,姓名,学号:");
FILE * student = fopen( "student.txt","wb+");
if( student == NULL )
{
printf("文件打开失败!");
system("pause");
return 0;
}
char a[100] ;
gets(a);
fwrite( a,(strlen(a)+1)*sizeof(char),1,student);
char szbuffer[100];
fseek(student,0L,0);
fread( szbuffer,(strlen(a)+1)*sizeof(char),1,student);
printf("写入的student.txt文件的内容为:%s\n",szbuffer);
fclose(student);
system("pause");
return 0;
}
这个题目考察的是fread和fwrite ,本来文本不应该用这两个函数.但是既然用了,要注意的是中间的文件指针,用fread的时候,需要fseek回到起始点,否则会出现乱码,经本人探测证明是对的.
学生信息的输入输出的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于学生信息输入输出编程c语言、学生信息的输入输出的信息别忘了在本站进行查找喔。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件至举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签: #学生信息的输入输出
相关文章