I would say that the first thing to do is be clear about what his expectations should be. While his resume isn't bad, a 3.1 GPA and no internship will not help. In fact, I'd argue that the GPA alone is enough to get it thrown out at HR for some larger companies (if there are a surplus of candidates). So, be clear that he may submit his resume for multiple positions and never hear anything back, but it's not really anything to worry about.
The second thing is that not having an internship isn't a bad thing. To be clear, I usually tell CS students to always do one, because it does help; however, when you're a fledgling out of college... realistically... they don't expect a ton out of you. Well, they might if it's some crazy, prestigious school or something, but let's be a bit generic. As a new-grad, companies expect that they'll have to train you, that you'll take longer to come up to speed, and that you may not be fully proficient in the language in question. For these companies, they see you as an investment. So, what you want to be able to do is show how you're a better pick than someone else like yourself. In other words, what's something that helps set you apart, and do not say things like "I'm a go-getter!"... everyone says junk like that. If you had to overcome some sort of adversity... let's say one of your partners in a group project was falling behind, and you helped them out... that's something worth mentioning.
Also, consider looking into government-related jobs as there are plenty of jobs in the software development field there. I do find that they are usually a bit more stable, and once you have a clearance, you can always jump around to different positions. Getting that clearance is a big hurdle, and I'll admit that not having one can hurt you if others that are interviewing already have one.