【SQL开源代码栏目提醒】:网学会员鉴于大家对SQL开源代码十分关注,论文会员在此为大家搜集整理了“C语言学生成绩系统源程序代码 - 技术总结”一文,供大家参考学习
include ltmalloc.hgtinclude ltstdio.hgtinclude ltstdlib.hgtdefine LEN sizeofstruct scorenodedefine DEBUGinclude ltstring.hgtstruct scorenodeint number/学号/char name10/姓名/float cyuyan/c成绩/float vbyuyan/vb成绩/float sqlyuyan/sql成绩 /struct scorenode nexttypedef struct scorenode scoreint nk/nk为全局变量,本程序中的函数均可以使用它///score creat2311void/函数creat2311功能:创建链表,此函数带回一个指向链表头的指针/ scorehead score p1p2p3max int ij float fen char t10 n0 p1p2p3score mallocLENheadp3 /开辟一个新单元/ printfquot请输入学生资料,输0退出quotrepeat1: printfquot请输入学生学号学号gt0:quot/输入学号,学号应大于0/ scanfquotdquotampp1-gtnumber whilep1-gtnumberlt0 getchar printfquot输入错误,请重新输入学生otdquotampp1-gtnumber /输入学号为字符或小于0时,程序报错,提示重新输入学号/ ifp1-gtnumber0 goto end/当输入的学号为0时,转到末尾,结束创建链表/ else p3head ifngt0 fori0iltni ifp1-gtnumberp3-gtnumber p3p3-gtnext else printfquot学号重复请重输nquot goto repeat1 /当输入的学号已经存在,程序报错,返回前面重新输入/ printfquot请输入学生nfquotsquotampp1-gtname/输入学生姓名/ printfquot请输入c成绩0100:quot/输入c成绩,成绩应在0-100/ scanfquotfquotampp1-gtcyuyan whilep1-gtcyuyanlt0p1-gtcyuyangt100 getchar printfquot输入错误,请重新输入c成绩quot/输入错误,重新输入c成绩直到正确为止/ scanfquotfquotampp1-gtcyuyan printfquot请输入vb成绩0100:quot/输入vb成绩,成绩应在0-100/ scanfquotfquotampp1-gtvbyuyan whilep1-gtvbyuyanlt0p1-gtvbyuyangt100 getchar printfquot输入错误,请重新输入vb成绩quot/输入错误,重新输入vb成绩直到正确为止/ scanfquotfquotampp1-gtvbyuyan printfquot请输入sql成绩0100:quot/输入sql成绩,成绩应在0-100/ scanfquotfquotampp1-gtsqlyuyan whilep1-gtsqlyuyanlt0p1-gtsqlyuyangt100 getchar printfquot输入错误,请重新输入sql成绩quot scanfquotfquotampp1-gtsqlyuyan/输入错误,重新输入sql成绩直到正确为止/ headNULLwhilep1-gtnumber0 nn1 ifn1 headp1 else p2-gtnextp1 p2p1 p1score mallocLEN printfquot请输入学生资料,输0退出quotrepeat2:printfquot请输入学生学号学号gt0:quot scanfquotdquotampp1-gtnumber/输入学号,学号应大于0/ whilep1-gtnumberlt0 getchar printfquot输入错误请重新输入学生otdquotampp1-gtnumber /输入学号为字符或小于0时,程序报错,提示重新输入学号/ ifp1-gtnumber0 goto end/当输入的学号为0时,转到末尾,结束创建链表/ else p3head ifngt0 fori0iltni ifp1-gtnumberp3-gtnumber p3p3-gtnext else printfquot学号重复请重输nquot goto repeat2 /当输入的学号已经存在,程序报错,返回前面重新输入/ printfquot请输入学生nfquotsquotampp1-gtname/输入学生姓名/ printfquot请输入c成绩0100:quot scanfquotfquotampp1-gtcyuyan/输入c成绩,成绩应在0-100/ whilep1-gtcyuyanlt0p1-gtcyuyangt100 getchar printfquot输入错误,请重新输入c成绩quot scanfquotfquotampp1-gtcyuyan/输入错误,重新输入c成绩直到正确为止/ printfquot请输入vb成绩0100:quot scanfquotfquotampp1-gtvbyuyan/输入vb成绩,成绩应在0-100/ whilep1-gtvbyuyanlt0p1-gtvbyuyangt100 getchar printfquot输入错误,请重新输入vb成绩quot scanfquotfquotampp1-gtvbyuyan/输入错误,重新输入vb成绩直到正确为止/ printfquot请输入sql成绩0100:quot scanfquotfquotampp1-gtsqlyuyan/输入sql成绩,成绩应在0-100/ whilep1-gtsqlyuyanlt0p1-gtsqlyuyangt100 getchar printfquot输入错误,请重新输入sql成绩quot scanfquotfquotampp1-gtsqlyuyan/输入错误,重新输入sql成绩直到正确为止/ end: p1head p3p1 fori1iltni forji1jltnj maxp1 p1p1-gtnext ifmax-gtnumbergtp1-gtnumber kmax-gtnumber max-gtnumberp1-gtnumber p1-gtnumberk /交换前后结点中的学号值,使得学号大者移到后面的结点中/ strcpytmax-gtname strcpymax-gtnamep1-gtname strcpyp1-gtnamet /交换前后结点中的姓名,使之与学号相匹配/ fenmax-gtcyuyan max-gtcyuyanp1-gtcyuyan p1-gtcyuyanfen /交换前后结点中的c成绩,使之与学号相匹配/ fenmax-gtvbyuyan max-gtvbyuyanp1-gtvbyuyan p1-gtvbyuyanfen /交换前后结点中的vb成绩,使之与学号相匹配/ fenmax-gtsqlyuyan max-gtsqlyuyanp1-gtsqlyuyan p1-gtsqlyuyanfen /交换前后结点中的sql成绩,使之与学号相匹配/ maxheadp1head/重新使maxp指向链表头/ p2-gtnextNULL/链表结尾/ printfquot输入的学生数为:d个nquotn returnhead////score load2311score head/函数load2311,功能:从文件读入学生记录/ score p1p2 int m0 char filepn10 FILE fp printfquot请输入文件路径及文件名:quot scanfquotsquotfilepn/输入文件路径及名称/ iffpfopenfilepnquotrquotNULL printfquot不能打开文件quot return 0 fscanffpquot 学生成绩管理系统 nquot fscanffpquot作者:第一组 班级:信息3101 学号:01 10 26 nquot fscanffpquot-------------------------------------------nquot fscanffpquot学号/姓名/c/vb/sql/nquot fscanffpquot-----------------------------------------nquot/读入表格域/ printfquot 学生成绩管理系统 nquot printfquot 作者:第一组 班级:信息3101 学号:01 10 26 nquot printfquot--------------------------------------------nquot printfquot学号/姓名/c/vb/sql/nquot printfquot-----------------------------------------nquot/打印表格域/ mm1 ifm1 p1score mallocLEN /开辟一个新单元/fscanffpquotdsfffquotampp1-gtnumberp1-gtnameampp1-gtcyuyanampp1-gtvbyuyanampp1-gtsqlyuyanprintfquotd/s/.1f/.1f/.1f/nquotp1-gtnumberp1-gtnamep1-gtcyuyanp1-gtvbyuyanp1-gtsqlyuyan /文件读入与显示/ headNULL do nn1 ifn1 headp1 else p2-gtnextp1 p2p1 p1score mallocLEN /开辟一个新单元/fscanffpquotdsfff/nquotampp1-gtnumberp1-gtnameampp1-gtcyuyanampp1-gtvbyuyanampp1-gtsqlyuyanprintfquotd/s/.1f/.1f/.1fnquotp1-gtnumberp1-gtnamep1-gtcyuyanp1-gtvbyuyanp1-gtsqlyuyan /文件读入与显示/ whilefeoffp p2-gtnextp1 p1-gtnextNULL nn1 printfquot-----------------------------------------/nquot/表格下线/ fclosefp/结束读入,关闭文件/ return head////score add2311score headscore stu/函数add2311功能:追加学生资料并且将所有学生资料按学号排序/ score p0p1p2p3max int ij float fen char t10 p3stuscore mallocLEN/开辟一个新单元/ printfquot/n输入要增加的学生的资料quot repeat4: printfquot请输入学生学号学号应大于0:quot scanfquotdquotampstu-gtnumber /输入学号,学号应大于0/ whilestu-gtnumberlt0 getchar printfquot输入错误,请重新输入学生otdquotampstu-gtnumber/输入错误,重新输入学号/ // ifstu-gtnumber0 goto end2/当输入的学号为0时,转到末尾,结束追加/ else p3head ifngt0 fori0iltni ifstu-gtnumberp3-gtnumber p3p3-gtnext else printfquot学号重复请重输nquot goto repeat4 /当输入的学号已经存在,程序报错,返回前面重新输入/ // printfquot输入学生nfquotsquotstu-gtname /输入学生姓名/ printfquot请输入c成绩0100:quot scanfquotfquotampstu-gtcyuyan /输入c成绩,成绩应在0-100/ whilestu-gtcyuyanlt0stu-gtcyuyangt100 getchar printfquot输入错误,请重新输入c成绩quot scanfquotfquotampstu-gtcyuyan /输入错误,重新输入c成绩直到正确为止/ printfquot请输入vb成绩0100:quot scanfquotfquotampstu-gtvbyuyan/输入vb成绩,成绩应在0-100/ whilestu-gtvbyuyanlt0stu-gtvbyuyangt100 getchar printfquot输入错误,请重新输入vb成绩quot scanfquotfquotampstu-gtvbyuyan/输入错误,重新输入vb成绩直到正确为止/ printfquot请输入sql成绩0100:quot scanfquotfquotampstu-gtsqlyuyan/输入sql成绩,成绩应在0-100/ whilestu-gtsqlyuyanlt0stu-gtsqlyuyangt100 getchar printfquot输入错误,请重新输入sql成绩quot scanfquotfquotampstu-gtsqlyuyan/输入错误,重新输入sql成绩直到正确为止/p1headp0stuifheadNULL headp0p0-gtnextNULL/当原来链表为空时,从首结点开始存放资料/ else/原来链表不为空/ ifp1-gtnextNULL/找到原来链表的末尾/ p1-gtnextp0 p0-gtnextNULL/将它与新开单元相连接/ else whilep1-gtnextNULL/还没找到末尾,继续找/ p2p1p1p1-gtnext p1-gtnextp0 p0-gtnextNULL nn1p1headp0stu fori1iltni forji1jltnj maxp1 p1p1-gtnext ifmax-gtnumbergtp1-gtnumber kmax-gtnumber max-gtnumberp1-gtnumber p1-gtnumberk /交换前后结点中的学号值,使得学号大者移到后面的结点中/ strcpytmax-gtname strcpymax-gtnamep1-gtname strcpyp1-gtnamet /交换前后结点中的姓名,使之与学号相匹配/ fenmax-gtcyuyan max-gtcyuyanp1-gtcyuyan p1-gtcyuyanfen /交换前后结点中的c成绩,使之与学号相匹配/ fenmax-gtvbyuyan max-gtvbyuyanp1-gtvbyuyan p1-gtvbyuyanfen /交换前后结点中的vb成绩,使之与学号相匹配/ fenmax-gtsqlyuyan max-gtsqlyuyanp1-gtsqlyuyan p1-gtsqlyuyanfen /交换前后结点中的sql成绩,使之与学号相匹配/ maxheadp1head/重新使maxp指向链表头/ end2: printfquot现在的学生数为:d个nquot returnhead////score search2311score head/函数search2311功能:查询学生成绩/int number score p1p2 printfquot输入要查询的学生的学号quot scanfquotdquotampnumberwhilenumber0 ifheadNULL printfquot没有任何学生资料/nquotreturnhead printfquot 学号 姓 名 c语言 vb sqlnquot /打印表格域/ p1head whilenumberp1-gtnumberampampp1-gtnextNULL p2p1p1p1-gtnext ifnumberp1-gtnumber printfquot4d 6s 0.1f 0.1f0.1fnquotp1-gtnumberp1-gtnamep1-gtcyuyanp1-gtvbyuyanp1-gtsqlyuyan /打印表格域/ else printfquotd不存在此学生/nquotnumber printfquot输入要查询的学生的学号quot scanfquotdquotampnumberprintfquot已经退出了nquotreturnhead////score del2311score head/函数del2311,功能:删除学生资料/ score p1p2int number printfquot输入要删除的学生的学号输入0时退出:quot scanfquotdquotampnumber getchar whilenumber0/输入学号为0时退出/ ifheadNULL printfquot没有任何学生资料nquot returnhead p1head whilenumberp1-gtnumberampampp1-gtnextNULL /p1指向的不是所要找的首结点,并且后面还有结点/ p2p1p1p1-gtnext /p1后移一个结点/ ifnumberp1-gtnumber /找到了/ ifp1head headp1-gtnext /若p1指向的是首结点,把地二个结点地址赋予head/ else p2-gtnextp1-gtnext /否则将下一个结点地址 赋给前一结点地址/ printfquot删除:d/nquotnumbernn-1 else printfquotd不存在此学生quotnumber /找不到该结点/ printfquot输入要删除的学生的otdquotampnumber getchar ifdef DEBUG printfquot已经退出了quotendifprintfquot现在的学生数为:d个nquot returnhead////void print2311score head/函数print2311功能:显示学生成绩/ score p ifheadNULL printfquot没有任何学生资料quotelseprintfquotdnquotn printfquot 学号 姓 名 c语言 vb sqlnquot/打印表格域/ phead do printfquot4d 6s 0.1f 0.1f0.1fnquotp-gtnumberp-gtnamep-gtcyuyanp-gtvbyuyanp-gtsqlyuyan /打印表格域/ pp-gtnextwhile pNULL/打印完成了/ //// score statistics2311score head /函数statistics2311功能:统计学生成绩/ float sum10sum20sum30ave10ave20ave30max0min score p int xy0i0 phead printfquot1个人总分和平均分nquot printfquot2单科平均分nquot printfquot3总分最高分nquot printfquot4总分最低分nquot scanfquotdquotampx getcharswitchx /用switch语句实现功能选择/case 1: ifheadNULL printfquot没有任何学生资料quotreturnhead/链表为空/ else printfquot学号 姓名 c vb sql 总分 平均分nquot /打印表格域/ whilepNULL sum1p-gtcyuyanp-gtvbyuyanp-gtsqlyuyan /计算个人总分/ ave1sum1/3/计算个人平均分/ printfquot d s 0.1f 0.1f 0.1f 0.1f0.1fnquotp-gtnumberp-gtnamep-gtcyuyanp-gtvbyuyanp-gtsqlyuyansum1ave1 /打印结果/ /打印表格域/ pp-gtnext returnhead break case 2: ifheadNULL printfquot没有任何学生资料nquotreturnhead/链表为空/ whilepNULL sum1sum1p-gtcyuyan sum2sum2p-gtvbyuyan sum3sum3p-gtsqlyuyan/计算总分/ yy1 ave1sum1/y ave2sum2/y ave3sum3/y/计算平均分/ pp-gtnext/使p指向下一个结点/ printfquotc平均分是.1f/nquotave1 printfquotvb平均分是.1f/nquotave2 printfquotsql平均分是.1f/nquotave3/打印结果/ returnhead break case 3: ifheadNULL printfquot没有任何学生资料quotreturnhead/链表为空/ maxp-gtcyuyanp-gtvbyuyanp-gtsqlyuyan whileiltn ii1 sum1p-gtcyuyanp-gtvbyuyanp-gtsqlyuyan /计算个人总分/ ifmaxltsum1 maxsum1 pp-gtnext printfquot总分最高分:.1fquotmax printfquot/nquot returnhead break case 4: ifheadNULL printfquot没有任何学生资料nquotreturnhead/链表为空/ whilepNULL minp-gtcyuyanp-gtvbyuyanp-gtsqlyuyan whilepNULL sum2p-gtcyuyanp-gtvbyuyanp-gtsqlyuyan ifmingtsum2 m.