当前位置:首页 » 编程语言 » c语言基于xml的学生系统存取
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言基于xml的学生系统存取

发布时间: 2022-08-26 09:32:42

c语言设计一个学生学籍管理系统,要求文件形式保存,且用到链表

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//链表结点结构体声明
typedefstructsubjects
{
charname[20];
floatscore;
}sub;

typedefstructstudent
{
intnum;
charname[20];
subsubject[3];
structstudent*next;
}stu,*pstu;

#defineSIZEsizeof(stu)

//函数申明
pstuLoadInfo();
voidPrintMenu();
pstuAddStu(pstu);
pstuDeleStu(pstu);
pstuRwrStu(pstu);
voidFindStu(pstu,char);
voidCount(pstu,char*,float,float);
voidRank(pstu,char*);
voidSaveQuit(pstu);

//主函数
intmain()
{
floatscore1,score2;
charn,j;
charsubname[20];
pstuhead,ptr;

head=LoadInfo();
ptr=head->next;

//创建菜单,进入选择循环
while(1)
{
PrintMenu();
printf("请输入您的选择编号:");
scanf("%d",&n);
getchar();
switch(n)
{
case1:
{
system("cls");
j=0;
while(4!=j)
{
printf("欢迎进入信息管理版块! ");
printf("251、添加学生 ");
printf("252、删除学生 ");
printf("253、修改学生信息 ");
printf("254、返回 ");
printf("请输入您的选择编号: ");
scanf("%d",&j);
getchar();

if(1==j)head=AddStu(head);
elseif(2==j)head=DeleStu(head);
elseif(3==j)head=RwrStu(head);
elseif(4==j);
elseprintf("输入有误,请重新输入! ");

}
printf("请输入回车键返回主菜单!");//此处本意按任意键返回,但是任意键的话,需要按键A,再按回车确定
getchar(); //则会连续收到两个按键,造成错误读入,可以改进scanf接收字符串,
system("cls"); //以下所有getchar()、system("cls")同理
break;
}
case2:
{
//信息查询
system("cls");
printf("欢迎进入信息查询版块! ");
printf("请输入要查询的学生编号:");
scanf("%d",&j);
getchar();
//printf("%d ",j); //检测输入是否成功,调试程序用
FindStu(head,j); //查询并输出
printf(" 请输入回车键返回主菜单!");
getchar();
system("cls");
break;
}
case3:
{
//成绩统计
system("cls");
printf("欢迎进入成绩统计版块! ");
printf("请输入科目:");
scanf("%s",&subname);
getchar();
printf("请输入分数范围(score1,score2):");
scanf("%f,%f",&score1,&score2);
getchar();
/*printf("%s%5.2f%5.2f ",subname,
score1,score2);*///检测输入是否成功,调试程序用
Count(head,subname,score1,score2); //统计并输出
printf("请输入回车键返回主菜单!");
getchar();
system("cls");
break;
}
case4:
{
//成绩排序
system("cls");
printf("欢迎进入成绩排序版块,请输入科目:");
scanf("%s",&subname);
getchar();
Rank(head,subname); //排序并输出
printf(" 请输入回车键返回主菜单! ");
getchar();
system("cls");
break;
}
case5:
{
//保存退出
SaveQuit(head); //文件操作,保存并退出
free(head);
return0;
}
default:
{
printf("输入有误,按回车键重新选择! "); //主菜单错误输出检测
getchar();
system("cls");
}
}
}


}

//加载data数据,文件操作
pstuLoadInfo()
{
intnum;
charname[20];
charsub1[20];
charsub2[20];
charsub3[20];
floatscore1;
floatscore2;
floatscore3;

charfilename[]="D:\编程学习\编程实践\c语言课程设计1学生信息管理\data.txt";//文件名,此处为简化编程,采用固定地址名称,未作输入
FILE*fp;
pstuhead,ptr;

//创建带表头结点的空单链表head,用来存放载入信息
head=(pstu)malloc(SIZE);
ptr=head;
ptr->next=NULL;


//加载data文件,存入head链表
if(NULL==(fp=fopen(filename,"r"))) //判断文件是否存在及可读
{
printf("error!");
exit(0);
}

while(!feof(fp))
{
fscanf(fp,"%d%s%s%f%s%f%s%f ",&num,&name,
&sub1,&score1,&sub2,&score2,&sub3,&score3);//读取一行,采用格式化读取,避免了其他各种读取方法的数据处理问题
//该方法缺点明显,对数据格式要求教研,故data文件规定数据格式
ptr->next=(pstu)malloc(SIZE);
ptr=ptr->next;
ptr->next=NULL;

ptr->num=num;
strcpy(ptr->name,name);
strcpy(ptr->subject[0].name,sub1);
ptr->subject[0].score=score1;
strcpy(ptr->subject[1].name,sub2);
ptr->subject[1].score=score2;
strcpy(ptr->subject[2].name,sub3);
ptr->subject[2].score=score3;

}

fclose(fp); //关闭文件,已得到保存data信息的链表head

returnhead;
}


//打印主菜单
voidPrintMenu()
{
printf("*************************************** ");
printf("枫枫学生信息管理系统 ");
printf("*************************************** ");
putchar(' ');
printf("菜单 ");
printf("251、信息管理 ");
printf("252、信息查询 ");
printf("253、成绩统计 ");
printf("254、成绩排序 ");
printf("255、保存退出 ");
}

//添加学生
pstuAddStu(pstux)
{
charnamestu[20];
char*p;
charsubname1[20],subname2[20],subname3[20];
pstuhead,ptr;

head=x;
ptr=head;

while(NULL!=ptr->next) //遍历链表,找到链尾结点
{
ptr=ptr->next;
}

ptr->next=(pstu)malloc(SIZE); //默认在链表末追加添加信息
ptr=ptr->next;
ptr->next=NULL;

printf("请输入添加学生的信息: ");

printf("请输入添加学生的学号:");
scanf("%d",&ptr->num);
getchar();

printf("请输入添加学生的姓名:");
scanf("%s",namestu);
getchar();
p=namestu;
strcpy(ptr->name,p);

printf("请输入添加学生的科目1名称:");
scanf("%s",&subname1);
getchar();
p=subname1;
strcpy(ptr->subject[0].name,p);

printf("请输入添加学生的科目1成绩:");
scanf("%f",&ptr->subject[0].score);
getchar();

printf("请输入添加学生的科目2名称:");
scanf("%s",&subname2);
getchar();
p=subname2;
strcpy(ptr->subject[1].name,p);

printf("请输入添加学生的科目2成绩:");
scanf("%f",&ptr->subject[1].score);
getchar();

printf("请输入添加学生的科目3名称:");
scanf("%s",&subname3);
getchar();
p=subname3;
strcpy(ptr->subject[2].name,p);

printf("请输入添加学生的科目3成绩:");
scanf("%f",&ptr->subject[2].score);
getchar();

putchar(' ');
returnhead;
}

//删除学生
pstuDeleStu(pstux)
{
intnum;
pstuhead,ptr,qtr;

head=x;
ptr=head->next;
qtr=head;

printf("请输入要删除的学生的学号:");
scanf("%d",&num);
getchar();

while(ptr!=NULL)
{
if(ptr->num!=num) //遍历查找链表结点,未找到跳过该结点
{
ptr=ptr->next;
qtr=qtr->next;
}
else //找到则删除结点
{
ptr=ptr->next;
qtr->next=ptr;
break;
}
}

printf("该学生信息已删除! ");
returnhead;
}

//修改学生信息
pstuRwrStu(pstux)
{
charnamestu[20];
char*p;
charsubname1[20],subname2[20],subname3[20];
intnum;
pstuhead,ptr;

head=x;
ptr=head->next;

printf("请输入要修改的学生的学号:");
scanf("%d",&num);
getchar();

while(ptr!=NULL)
{
if(ptr->num==num)
{
printf("已找到该学生信息,请填入修改项目:");

printf("请输入修改学生的姓名:");
scanf("%s",namestu);
getchar();
p=namestu;
strcpy(ptr->name,p);

printf("请输入修改学生的科目1名称:");
scanf("%s",subname1);
getchar();
p=subname1;
strcpy(ptr->subject[0].name,p);

printf("请输入修改学生的科目1成绩:");
scanf("%f",&ptr->subject[0].score);
getchar();

printf("请输入修改学生的科目2名称:");
scanf("%s",subname2);
getchar();
p=subname2;
strcpy(ptr->subject[1].name,p);

printf("请输入修改学生的科目2成绩:");
scanf("%f",&ptr->subject[1].score);
getchar();

printf("请输入修改学生的科目3名称:");
scanf("%s",subname3);
getchar();
p=subname3;
strcpy(ptr->subject[2].name,p);

printf("请输入修改学生的科目3成绩:");
scanf("%f",&ptr->subject[2].score);
getchar();

printf("该学生信息已修改! ");
break;
}
else
{
ptr=ptr->next;
}
}

returnhead;
}

//查找学生,参数为链表指针,和学生学号
//不好,应该将学号输入放进子函数,简化主函数结构,减少子函数参数
voidFindStu(pstux,chary)
{
pstuhead,ptr;

head=x;
ptr=head->next;

while(ptr!=NULL)
{
if(ptr->num==(int)y) //因主函数中为节省空间,学号输入采用char数据,故强行准换
{
printf("已找到该学生信息! 如下:");
printf("%03d%s%s%5.2f%s%5.2f%s%5.2f ",
ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score,ptr->subject[1].name,ptr->subject[1].score,ptr->subject[2].name,ptr->subject[2].score); break; //注意此处找到并输出信息后要手动退出循环
}
else
{
ptr=ptr->next;
}
}
if(ptr==NULL) //查询成功检测,while循环中若找到,则ptr停留在当前学生的结点上
{
printf("未能找到该学生信息! ");
}
}


//统计科目分数区间段的学生,参数为链表指针,科目名称,分数区间上下限
//同理,参数的录入应放入子函数,简化结构和编程
voidCount(pstux,char*y,floatq,floatp)
{
pstuhead,ptr;
charname[20];
charflag=0; //手动设置的查找结果flag

head=x;
ptr=head->next;
strcpy(name,y);

//printf("%s%5.2f%5.2f ",name,q,p); //检测输入参数的传递,调试程序用

while(ptr!=NULL) //开始查找统计,科目查找用strcmp函数比较科目字符串,返回值0为字符串相等
{ //此处while循环体中,重复的查找步骤太多,应设置科目匹配flag,参照rank()函数
if(strcmp(name,ptr->subject[0].name)==0) //通过flag将科目确认放在while之外,循环体内只做分数区间的扫描和输出
{
if(q<=ptr->subject[0].score&&ptr->subject[0].score<=p)
{
printf("%03d%s%s%5.2f ",ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score);
flag++;
}
}
if(strcmp(name,ptr->subject[1].name)==0)
{
if(q<=ptr->subject[1].score&&ptr->subject[1].score<=p)
{
printf("%03d%s%s%5.2f ",ptr->num,ptr->name,ptr->subject[1].name,ptr->subject[1].score);
flag++;
}
}
if(strcmp(name,ptr->subject[2].name)==0)
{
if(q<=ptr->subject[2].score&&ptr->subject[2].score<=p)
{
printf("%03d%s%s%5.2f ",ptr->num,ptr->name,ptr->subject[2].name,ptr->subject[2].score);
flag++;
}
}

ptr=ptr->next;
}

if(flag==0)
{
printf("未能找到该课程该区间分数段的学生! ");
}
}


//学科成绩排名,采用交换数据的方法,参数为链表指针,科目名称
//同理参数问题
//链表排序问题,此处用交换结点数据方法,还有其他多种排序方法
//如,交换结点,辅助指针数组排序(未实现,过程繁杂),插入法排序等
voidRank(pstux,char*y)
{
pstuhead,ptr,qtr;
charname[20];
charlen=0;
charflag=0; //简化算法,设置科目查找结果判断值,flag=0表示科目输入为未知科目,不存在
inti=0; //i、j循环次数控制参数
intj=0;
chartemp_name[20]; //数据交换时的暂存信息变量
floattemp0,temp1,temp2;
inttemp_num;

strcpy(name,y);
head=x;

ptr=head->next;
while(ptr!=NULL) //测链表长度,不包括表头结点
{
ptr=ptr->next;
len++;
}
ptr=head->next; //指针ptr用过之后记得回原位


//开始查找科目
if(strcmp(name,ptr->subject[0].name)==0) flag=1;
if(strcmp(name,ptr->subject[1].name)==0) flag=2;
if(strcmp(name,ptr->subject[2].name)==0) flag=3;
if(flag==0)
{
printf("未找到该科目!");
return;
}

//开始排序,冒泡法比较各结点数据
//此处3个并列的if用switchcase更清晰结构
if(n==1)
{
for(i=0;i<len;i++)
{
ptr=head->next->next; //每一次内循环之后,ptr、qtr必然在最后两个节点上
qtr=head->next; //故在进行内循环之前,要重新复位ptr、qtr
for(j=0;j<len-i-1;j++)
{
if(qtr->subject[0].score<ptr->subject[0].score)
{
temp_num=qtr->num; //交换数据,因数据格式(科目顺序)明确规定,故不再做科目名称的替换
strcpy(temp_name,qtr->name);
temp0=qtr->subject[0].score;
temp1=qtr->subject[1].score;
temp2=qtr->subject[2].score;

qtr->num=ptr->num;
strcpy(qtr->name,ptr->name);
qtr->subject[0].score=ptr->subject[0].score;
qtr->subject[1].score=ptr->subject[1].score;
qtr->subject[2].score=ptr->subject[2].score;

ptr->num=temp_num;
strcpy(ptr->name,temp_name);
ptr->subject[0].score=temp0;
ptr->subject[1].score=temp1;
ptr->subject[2].score=temp2;
}
qtr=qtr->next;
ptr=ptr->next;
}
}
}

if(n==2)
{
for(i=0;i<len;i++)
{
ptr=head->next->next;
qtr=head->next;
for(j=0;j<len-i-1;j++)
{
if(qtr->subject[1].score<ptr->subject[1].score)
{
temp_num=qtr->num;
strcpy(temp_name,qtr->name);
temp0=qtr->subject[0].score;
temp1=qtr->subject[1].score;
temp2=qtr->subject[2].score;

qtr->num=ptr->num;
strcpy(qtr->name,ptr->name);
qtr->subject[0].score=ptr->subject[0].score;
qtr->subject[1].score=ptr->subject[1].score;
qtr->subject[2].score=ptr->subject[2].score;

ptr->num=temp_num;
strcpy(ptr->name,temp_name);
ptr->subject[0].score=temp0;
ptr->subject[1].score=temp1;
ptr->subject[2].score=temp2;
}
qtr=qtr->next;
ptr=ptr->next;
}
}
}

if(n==3)
{
for(i=0;i<len;i++)
{
ptr=head->next->next;
qtr=head->next;
for(j=0;j<len-i-1;j++)
{
if(qtr->subject[2].score<ptr->subject[2].score)
{
temp_num=qtr->num;
strcpy(temp_name,qtr->name);
temp0=qtr->subject[0].score;
temp1=qtr->subject[1].score;
temp2=qtr->subject[2].score;

qtr->num=ptr->num;
strcpy(qtr->name,ptr->name);
qtr->subject[0].score=ptr->subject[0].score;
qtr->subject[1].score=ptr->subject[1].score;
qtr->subject[2].score=ptr->subject[2].score;

ptr->num=temp_num;
strcpy(ptr->name,temp_name);
ptr->subject[0].score=temp0;
ptr->subject[1].score=temp1;
ptr->subject[2].score=temp2;
}
qtr=qtr->next;
ptr=ptr->next;
}
}
}

//输出排序过后的链表
ptr=head->next;
while(ptr!=NULL)
{
printf("%03d%s%s%5.2f%s%5.2f%s%5.2f ",
ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score,
ptr->subject[1].name,ptr->subject[1].score,
ptr->subject[2].name,ptr->subject[2].score);
ptr=ptr->next;
}
}


//保存文件并退出,文件操作
voidSaveQuit(pstux)
{
pstuhead,ptr;
FILE*fp;
charfilename[]="D:\编程学习\编程实践\c语言课程设计1学生信息管理\data.txt";
head=x;
ptr=head->next;

if(NULL==(fp=fopen(filename,"w"))) //判断文件是否存在及可读
{
printf("error!");
exit(0);
}

while(ptr!=NULL) //遍历链表结点,按data约定格式输出数据
{
fprintf(fp,"%03d%s%s%5.2f%s%5.2f%s%5.2f ",
ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score,

Ⅱ java基于xml文件学生信息管理系统

你好,你要的学生信息管理系统。(1) Student类import java.io.Serializable;/** * @author liuxe * @since JDK 1.7.0_79 */public class Student implements Serializable { private int stuId; private String name; private String major; private String sex; private String contactWay; public int getStuId() { return stuId; } public void setStuId(int stuId) { this.stuId = stuId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getContactWay() { return contactWay; } public void setContactWay(String contactWay) { this.contactWay = contactWay; }}(2) StuMis类import java.io.*;import java.util.ArrayList;import java.util.List;/** * @author liuxe * @since JDK 1.7.0_79 */public class StuMis { public static List studentList = new ArrayList(); public static boolean add(Student student) { return studentList.add(student); } public static boolean remove(Student student) { return studentList.remove(student); } public static boolean update(Student student) { for (Student dto : studentList) { if (student.getStuId() == dto.getStuId()) { studentList.remove(dto); } } return studentList.add(student); } public static Student queryByStuId(int id) { for (Student dto : studentList) { if (id == dto.getStuId()) { return dto; } } return null; } public static List queryByName(String name) { List returnList = new ArrayList(); for (Student dto : studentList) { if (name.equals(dto.getName())) { returnList.add(dto); } } return returnList; } public static void saveToFile() { try { ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream( new File("." + File.separator + "student.dat"))); oo.writeObject(studentList); } catch (Exception ex) { ex.printStackTrace(); } } public static void readFromFile() { try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream( new File("." + File.separator + "student.dat"))); studentList = (List) ois.readObject(); } catch (Exception ex) { ex.printStackTrace(); } }}(3)、StuMisTest类:主函数测试学生信息管理系统import java.util.List;/** * @author liuxe * @since JDK 1.7.0_79 */public class StuMisTest { public static void main(String[] args) { Student student = new Student(); student.setStuId(1); student.setName("AAA"); student.setMajor("AAAA"); student.setSex("A"); student.setContactWay("AA"); Student student2 = new Student(); student2.setStuId(2); student2.setName("BBB"); student2.setMajor("BBBB"); student2.setSex("B"); student2.setContactWay("BB"); Student student3 = new Student(); student3.setStuId(3); student3.setName("CCC"); student3.setMajor("CCCC"); student3.setSex("C"); student3.setContactWay("CC"); //A、 增加一个学生记录 StuMis.add(student); StuMis.add(student2); StuMis.add(student3); //B、 删除一个学生记录 StuMis.remove(student2); //C、 修改学生信息 student.setMajor("DDDD"); StuMis.update(student); //D、 根据学号查找学生 Student studentXX = StuMis.queryByStuId(3); //E、 根据姓名查找学生。。。 List studentOO = StuMis.queryByName("AAA"); //F、 将集合中所有学生信息存储到student.dat中。 StuMis.saveToFile(); //G、 再次运行系统时加载student.dat中的学生信息,后支持A~E基本操作。 StuMis.readFromFile(); }}

Ⅲ 基于XML学生信息发布系统

你如果ASP写 就有点麻烦了 用PHP好点 因为PHP毕竟比较想C语言的语法 而且处理XML PHP或者JSP也有很多类来操作的

Ⅳ C语言 如何读取xml文件中的数据并存入一个结构体中

一般是用第三方比如TinyXml,或者你自己实现。

Ⅳ c语言如何解析xml并将所有内容存入数组

/*前段时间恰好做过类似的东西,代码可以给你参考下。
*Xml配置见最后
*/

typedefstructSrcFileFmt
{
intColID;
charColCode[64];/*字段英文名称*/
charColName[128];/*字段中文名称*/
charColType[20];/*字段类型(包含长度)*/
charColComment[128];/*字段描述*/
}SrcFileFmt;

intmain(intargc,char**argv)
{
SrcFileFmtSrcFileFmt[128];
intiNum=-1;
if(2>argc)
{
printf("Usage:%sSrcXmlFile ",argv[0]);
return-1;
}
iNum=parseSourceCfg(SrcCfgFile,SrcFileFmt);
if(iNum==-1)
{
return-1;
}
return0;
}

/*调用此函数后,xml文件的内容会被存储到结构体数组SrcFileFmtsrcfilefmt[]中
*此函数依赖于libxml2-2.9.2.tar.xz
*/
intparseSourceCfg(char*FileName,SrcFileFmtsrcfilefmt[])
{/*解析源文件xml,FileName为源xml文件名*/
xmlDocPtrdoc;
xmlNodePtrcur,root;
charsFileName[64]={''};
intcnt=0;
if(FileName==NULL)
{
return-1;
}
sprintf(sFileName,"%s.xml",FileName);
doc=xmlParseFile(sFileName);
if(doc==NULL)
{
return-1;
}
root=xmlDocGetRootElement(doc);
if(root==NULL){
xmlFreeDoc(doc);
return(-1);
}
if(xmlStrcmp(root->name,(constxmlChar*)"SrcRoot"))
{
xmlFreeDoc(doc);
return-1;
}

cur=root->xmlChildrenNode;
while(cur!=NULL)
{
if((!xmlStrcmp(cur->name,(constxmlChar*)"Column")))
{
xmlChar*key;
xmlNodePtrcur_sub=cur;
cur_sub=cur_sub->xmlChildrenNode;

while(cur_sub!=NULL)
{
if((!xmlStrcmp(cur_sub->name,(constxmlChar*)"ColID"))){
key=xmlNodeListGetString(doc,cur_sub->xmlChildrenNode,1);
killblank((char*)key);
srcfilefmt[cnt].ColID=atoi((char*)key);
xmlFree(key);
}
if((!xmlStrcmp(cur_sub->name,(constxmlChar*)"ColCode"))){
key=xmlNodeListGetString(doc,cur_sub->xmlChildrenNode,1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColCode,(char*)key);
xmlFree(key);
}
elseif((!xmlStrcmp(cur_sub->name,(constxmlChar*)"ColName"))){
key=xmlNodeListGetString(doc,cur_sub->xmlChildrenNode,1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColName,(char*)key);
xmlFree(key);
}
elseif((!xmlStrcmp(cur_sub->name,(constxmlChar*)"ColType"))){
key=xmlNodeListGetString(doc,cur_sub->xmlChildrenNode,1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColType,(char*)key);
xmlFree(key);
}
elseif((!xmlStrcmp(cur_sub->name,(constxmlChar*)"ColComment"))){
key=xmlNodeListGetString(doc,cur_sub->xmlChildrenNode,1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColComment,(char*)key);
xmlFree(key);
}
cur_sub=cur_sub->next;
}
cnt++;
}
cur=cur->next;
}
xmlFreeDoc(doc);
returncnt;
}

<SrcRoot>
<Column>
<ColID>1</ColID>
<ColCode>kmh</ColCode>
<ColName>字段1</ColName>
<ColType>VARCHAR(11)</ColType>
</Column>
<Column>
<ColID>2</ColID>
<ColCode>dfkmh</ColCode>
<ColName>字段2</ColName>
<ColType>VARCHAR(11)</ColType>
</Column>
<Column>
<ColID>3</ColID>
<ColCode>hbh</ColCode>
<ColName>字段3</ColName>
<ColType>INTEGER(10)</ColType>
</Column>
</SrcRoot>

Ⅵ 采用XML文档作为数据库,设计一学生管理系统

【学生信息管理系统设计论文——学生管理系统】

点击下载
http://www.lunwenqiao.com/%E5%85%8D%E8%B4%B9%E8%AE%BA%E6%96%87/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1.doc

我想这就是你要的。

======================================================================

再附送一个

【C语言设计一学生成绩管理系统】

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct stud
{
long num;
char name[20];
double score;
};

typedef struct stucode
{
struct stud student ;
struct stucode *next;
}L;

void menu();
void createlist(struct stucode **r);
void out(struct stucode *r);
void search1(struct stucode *r);
void search2(struct stucode *r);
void del(struct stucode **r);
void insert(struct stucode **r);
void sort(struct stucode **r);

void main()
{
char choose;
int flag=1;
struct stucode *r=NULL;

while(flag)
{
system("cls");
menu();
choose=getchar();
switch(choose)
{
case '1':
createlist(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '2':
search1(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '3':
search2(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '4':
del(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '5':
insert(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '6':
sort(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '7':
out(r);
printf("Testing function 7\nPress any key to continue\n");
getchar();
getchar();
break;

case '0':
flag=0;
printf("The end.\n");
break;

default: printf("\nWrong Selection!(选择错误,请重选!)\n");getchar();getchar();
}
}
}

void createlist(struct stucode **r)
{
struct stucode *p,*t;
long n;
char a[20];
double s;
if(*r) *r=NULL;
printf(" \n请输入:\n 学号(请按学号升序排列) 姓名 分数 (若要结束请输入三个为零)\n");
scanf("%ld%s%lf",&n,a,&s);
if(n==0) return;

p=(L *)malloc(sizeof(L));
p->student.num=n;
strcpy(p->student.name,a);
p->student.score=s;
p->next=NULL;
*r=p;

scanf("%ld%s%lf",&n,a,&s);

while(n)
{
t=p;
p=(L *)malloc(sizeof(L));
p->student.num=n;
strcpy(p->student.name,a);
p->student.score=s;
p->next=NULL;
t->next=p;
scanf("%ld%s%lf",&n,a,&s);
}
}

void search1(struct stucode *r)
{
long x;
if(!r)
{
printf("没有学生信息可查询!\n");
return ;
}
printf(" 请输入要查询的学生信息的学生学号:\n");
scanf("%ld",&x);
while(r&&r->student.num!=x)
r=r->next;
if(r==NULL)
printf("Error! No such student !\n");
else
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);
}
void search2(struct stucode *r)
{
char m[20];
if(!r)
{
printf("没有学生信息可查询!\n");
return ;
}

printf(" 请输入要查询的学生信息的学生姓名:\n");
scanf("%s",m);
while(r&&strcmp(r->student.name,m))
r=r->next;
if(r==NULL)
printf("Error! No such student !\n");
else
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);
}
void del(struct stucode **r)
{
long k;
struct stucode *p=*r,*t;
if(!(*r))
{
printf("没有学生信息可删除 !\n");
return ;
}
printf(" 请输入要删除的学生信息的学生学号:\n");
scanf("%ld",&k);

if(p->student.num==k)
*r=(*r)->next,free(p);
else
{
while(p->next&&p->next->student.num!=k)
p=p->next;
if(p->next==NULL)
printf("Error! No such student !\n");
else
{
t=p->next;
p->next=p->next->next;
free(t);
}
}

}
void insert(struct stucode **r)
{
long n;
char a[20];
double s;

L *p,*t,*k;
printf(" 请输入要插入的学生信息的学生学号 姓名 分数:\n");
scanf("%ld%s%lf",&n,a,&s);
p=(L *)malloc(sizeof(L));
p->student.num=n;
p->student.score=s;
strcpy(p->student.name,a);
if(!(*r))
{
*r=p;
(*r)->next=NULL;
return ;
}
if(p->student.num<(*r)->student.num)
p->next=(*r),(*r)=p;
else
{
t=*r;
k=t;
while(t->next&&t->next->student.num<=p->student.num)
t=t->next;
p->next=t->next;
t->next=p;
*r=k;
}
}

void sort(struct stucode **r)
{
struct stucode *t,*p,*q,*z;
if(!r)
{
printf("没有学生信息可排序!\n");
return ;
}

if(!(*r)||!(*r)->next)
return;

t=*r;
p=t->next;
t->next=NULL;
while(p)
{
q=p->next;
if(p->student.score>t->student.score)
{
p->next=t;
t=p;
}
else
{
z=t;
while(z->next&&z->next->student.score>=p->student.score)
z=z->next;
p->next=z->next;
z->next=p;
}

p=q;
}
*r=t;

}
void out(struct stucode *r)
{
printf("\n\n");
if(!r)
{
printf("没有学生信息可输出!\n");
return ;
}

while(r)
{
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);
r=r->next;
}
printf("\n\n");
}
void menu()
{
printf("\n 学生成绩管理系统\n");
printf("\n 菜单\n\n");
printf("\n 1建立链表并显示\n");
printf("\n 2查找某学号的学生信息\n");
printf("\n 3查找某姓名的学生信息\n");
printf("\n 4删除某学号的学生信息\n");
printf("\n 5插入新的学生信息\n");
printf("\n 6按分数降序排列输出\n");
printf("\n 7输出\n");
printf("\n 0退出\n");

printf("\n 请选择您要执行的选项:\n");
}

Ⅶ 如何用c语言制作一个学生信息管理系统,要求以文件形式保存

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//链表结点结构体声明

typedef struct subjects

{

char name[20];

float score;

}sub;

typedef struct student

{

int num;

char name[20];

sub subject[3];

struct student* next;

}stu,*pstu;

#define SIZE sizeof(stu)

//函数申明

pstu LoadInfo();

void PrintMenu();

pstu AddStu(pstu );

pstu DeleStu(pstu );

pstu RwrStu(pstu );

void FindStu(pstu , char );

void Count(pstu ,char * ,float ,float );

void Rank(pstu ,char * );

void SaveQuit(pstu );

//创建菜单,进入选择循环

while(1)

{

PrintMenu();

printf("请输入您的选择编号:");

scanf("%d",&n);

getchar();

switch(n)

{

case 1:

{

system("cls");

j=0;

while(4!=j)

{

printf("欢迎进入信息管理版块! ");

printf("25 1、添加学生 ");

printf("25 2、删除学生 ");

printf("25 3、修改学生信息 ");

printf("25 4、返回 ");

printf("请输入您的选择编号: ");

scanf("%d",&j);

getchar();

if ( 1 == j) head = AddStu(head);

else if( 2 == j) head = DeleStu(head);

else if( 3 == j) head = RwrStu(head);

else if( 4 == j) ;

else printf("输入有误,请重新输入! ");

}

case 2:

{

//信息查询

system("cls");

printf("欢迎进入信息查询版块! ");

printf("请输入要查询的学生编号:");

scanf("%d",&j);

getchar();

//printf("%d ",j); //检测输入是否成功,调试程序用

FindStu(head,j); //查询并输出

printf(" 请输入回车键返回主菜单!");

getchar();

system("cls");

break;

}

(7)c语言基于xml的学生系统存取扩展阅读:

C语言包含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。

实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。

Ⅷ C语言学生管理系统 文件保存读取问题求教

给你个示例吧。。。。

有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出
平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
1.程序分析:
2.程序源代码:
#include "stdio.h"
struct student
{ char num[6];
char name[8];
int score[3];
float avr;
} stu[5];
main()
{int i,j,sum;
FILE *fp;
/*input*/
for(i=0;i<5;i++)
{ printf("\n please input No. %d score:\n",i);
printf("stuNo:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
sum=0;
for(j=0;j<3;j++)
{ printf("score %d.",j+1);
scanf("%d",&stu[i].score[j]);
sum+=stu[i].score[j];
}
stu[i].avr=sum/3.0;
}
fp=fopen("stud","w");
for(i=0;i<5;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}

Ⅸ 用C语言读取xml文件,怎么实现

我上次才给人写过
xml文件内容

<?xmlversion="1.0"encoding="UTF-8"?>
-<aicomoa_response>
-<country_list>
-<country>
<id>7</id>
<pid>0</pid>
<continent_id>1</continent_id>
<guohao>93</guohao>
<cntitle>阿富汗</cntitle>
<entitle>Afghanistan</entitle>
<hztitle>阿富汗</hztitle>
<jptitle>アフガニスタン</jptitle>
<kotitle>??????</kotitle>
<jp_pinyin>ア</jp_pinyin>
<pinyin>AFuHan</pinyin>
<sid>0</sid>
<jibie>1</jibie>
</country>
-<country>
<id>8</id>
<pid>0</pid>
<continent_id>2</continent_id>
<guohao>355</guohao>
<cntitle>阿尔巴尼亚</cntitle>
<entitle>Albania</entitle>
<hztitle>阿尔巴尼亚</hztitle>
<jptitle>アルバニア</jptitle>
<kotitle/>
<jp_pinyin>ア</jp_pinyin>
<pinyin>AErBaNiYa</pinyin>
<sid>0</sid>
<jibie>1</jibie>
</country>
</country_list>
</aicomoa_response>

运行结果

Info[0]=[id:7|pid:0|continent_id:1|guohao:93|cntitle:阿富汗|entitle:Afghanistan|
hztitle:阿富汗|jptitle:アフガニスタン|kotitle:??????|jp_pinyin:ア|pinyin:AFuHan|
sid:0|jibie:1|]
Info[1]=[id:7|pid:0|continent_id:1|guohao:93|cntitle:阿富汗|entitle:Afghanistan|
hztitle:阿富汗|jptitle:アフガニスタン|kotitle:??????|jp_pinyin:ア|pinyin:AFuHan|
sid:0|jibie:1|]
Pressanykeytocontinue

代码

#include<stdio.h>
#include<string.h>
main()
{
inti=0;
FILE*fp;
charszFileBuff[1024]={0},szBuff[100][1024];
charid[10]={0},pid[10]={0},continent_id[10]={0},guohao[10]={0},
cntitle[64]={0},entitle[64]={0},hztitle[64]={0},jptitle[64]={0},
kotitle[64]={0},jp_pinyin[64]={0},pinyin[64]={0},sid[10]={0},jibie[10]={0};
char*lFirst,*lEnd;

fp=fopen("country.txt","r");
if(fp==NULL)
{
printf("readXMLfileerror! ");
}
while(fgets(szFileBuff,1023,fp))
{
if((lFirst=strstr(szFileBuff,"<id>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</id>");
memcpy(id,lFirst+4,lEnd-lFirst-4);
}
if((lFirst=strstr(szFileBuff,"<pid>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</pid>");
memcpy(pid,lFirst+5,lEnd-lFirst-5);
}
if((lFirst=strstr(szFileBuff,"<continent_id>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</continent_id>");
memcpy(continent_id,lFirst+14,lEnd-lFirst-14);
}
if((lFirst=strstr(szFileBuff,"<guohao>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</guohao>");
memcpy(guohao,lFirst+8,lEnd-lFirst-8);
}
if((lFirst=strstr(szFileBuff,"<cntitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</cntitle>");
memcpy(cntitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<entitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</entitle>");
memcpy(entitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<hztitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</hztitle>");
memcpy(hztitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<jptitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</jptitle>");
memcpy(jptitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<kotitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</kotitle>");
memcpy(kotitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<jp_pinyin>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</jp_pinyin>");
memcpy(jp_pinyin,lFirst+11,lEnd-lFirst-11);
}
if((lFirst=strstr(szFileBuff,"<pinyin>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</pinyin>");
memcpy(pinyin,lFirst+8,lEnd-lFirst-8);
}
if((lFirst=strstr(szFileBuff,"<sid>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</sid>");
memcpy(sid,lFirst+5,lEnd-lFirst-5);
}
if((lFirst=strstr(szFileBuff,"<jibie>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</jibie>");
memcpy(jibie,lFirst+7,lEnd-lFirst-7);
}
if((lFirst=strstr(szFileBuff,"</country>"))!=NULL)
{
sprintf(szBuff[i],"id:%s|pid:%s|continent_id:%s|guohao:%s|cntitle:%s|entitle:%s|hztitle:%s|jptitle:%s|kotitle:%s|jp_pinyin:%s|pinyin:%s|sid:%s|jibie:%s|",
id,pid,continent_id,guohao,cntitle,entitle,hztitle,jptitle,kotitle,jp_pinyin,pinyin,sid,jibie);
printf("Info[%d]=[%s] ",i++,szBuff);
}
}
fclose(fp);
}

Ⅹ C语言学生管理系统 文件保存读取问题求教。。

用文件指针,文件读写需要知道写入的格式的,不然会乱的,例子如下:
File *p;
if(p=fopen("学生成绩.txt","r")==NULL)
{printf("读取失败");
exit(0);}
fclose(p);
我写过你这个系统,你有什么问题可以找我,我可以帮你